Очистка кэша для приложения laravel 4 перед тестами кодирования


Я использую codeception для выполнения приемочных тестов для приложения laravel. Одна из проблем, с которой я столкнулся, заключается в том, что мои тесты входа в систему начинают давать сбои, когда страница входа кэшируется, и, я думаю, я автоматически вхожу в систему. Я думаю, что это так, потому что мои тесты начинают проходить снова, когда я очищаю кэш, и они, как правило, начинают отказывать без того, чтобы я изменил тесты или код приложения вообще.

Вот тест входа в систему, о котором идет речь, теперь извлеченный в Помощник метод

public function login($username, $password, $I) {
    $I->amOnPage('users/login');
    $I->fillField('email', $username);
    $I->fillField('password', $password);
    $I->click('Login');
    $I->amOnPage('admin/');
    $I->see('Welcome');
  }

Я периодически очищаю кэш всякий раз, когда тесты терпят неудачу, но это становится утомительным. Я хотел бы иметь возможность зарегистрировать помощника, чтобы очистить кэш для меня и просто вызвать функцию во всех моих тестах. Я извлек функцию в помощника, как было предложено здесь со следующей функцией в AcceptanceHelper.php:

  public function clearCache($I) {
    $cache = $this->getModule('Cache');
    $cache->flush();
  }

Это, кажется, то, что было предложено документацией здесь , но я получаю ошибку " кэш модуля не может быть связанный". Похоже, мне нужен был модуль Laravel4, поэтому я добавил Это к своему согласию.комплект.yml файл, но не повезло там либо я получил эту ошибку:

SQLSTATE[28000] [1045] Access denied for user 'stephen'@'localhost' (using password: NO)  

Я думал, что мне нужно будет авторизовать mysql в файле конфигурации, но это тоже не сработало. Вот мое согласие.комплект.файл yml:

class_name: AcceptanceTester
modules:
    enabled:
        - PhpBrowser
        - AcceptanceHelper
        - Laravel4
    config:
        PhpBrowser:
          url: 'http://104.131.29.69:8000/'
        Laravel4:
          user: 'root'
          password: 'pAsSwOrD'

Наконец я прочитал этот ответ, и мне показалось, что на самом деле я не должен был включать Laravel4 в конфигурационный файл и что моя вспомогательная функция должна выглядеть более похоже это:

public function clearCache($I) {
$L = $I->getLaravel4();
Cache::flush();
}

Но вместо этого я просто получаю эту ошибку:

Class 'CodeceptionModuleCache' not found
Так что я застрял. Спасибо!
2 2

2 ответа:

Artisan::call('cache:clear');

Это лучший подход.

Хорошо, я придумал, как это сделать. По-видимому, есть модуль под названием cli, который вы можете включить в приемку.комплект.файл yml выглядит следующим образом:

class_name: AcceptanceTester
modules:
    enabled:
        - PhpBrowser
        - AcceptanceHelper
        - Cli

Этот модуль позволяет использовать команды оболочки в вашем скрипте с функцией runShellCommand(). Поскольку мой кэш хранится в файлах в каталоге app / storage / cache/, мне нужно выполнить команду shell:

rm app/storage/cache/*

И вуаля кэш очищен. Тогда в тестовом файле он будет выглядеть так:

$I->runShellCommand('rm -rf app/storage/cache/*');

Я решил упростить эту задачу. немного включив его в функцию, которую я использовал для входа в систему, так как я знал, что хочу очистить кэш перед каждым входом в систему, я просто включил эту строку в функцию входа в AcceptanceHelper, которая затем доступна во всех моих тестах.

Это немного обходной путь, так как он не является агностическим по отношению к типу кэширования, которое я использую (если бы я использовал memcached, мне нужно было бы сделать что-то другое), но он работал для меня, поэтому я решил поделиться им.