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

Я использую кодирование для запуска приемочных тестов для приложения 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, поэтому я добавил его в свой файл accept.suite.yml, но там мне не повезло: я получил эту ошибку:

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

Я думал, что мне нужно авторизовать mysql в конфигурационном файле, но это тоже не сработало. Вот мой файл accept.suite.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 'Codeception\Module\Cache' not found

Так что я застрял. Спасибо!

2

Решение

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

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

1

Другие решения

Итак, я понял, как это сделать. Видимо, есть модуль под названием cli который вы можете включить в файл accept.suite.yml следующим образом:

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

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

rm app/storage/cache/*

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

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

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

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

1