Я использую кодирование для запуска приемочных тестов для приложения 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
Так что я застрял. Спасибо!
Artisan::call('cache:clear');
это лучший подход.
Итак, я понял, как это сделать. Видимо, есть модуль под названием 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, мне нужно было бы сделать что-то другое), но это сработало для меня, поэтому я решил поделиться им.