Очистка кэша для приложения 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 ответа:
Хорошо, я придумал, как это сделать. По-видимому, есть модуль под названием
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, мне нужно было бы сделать что-то другое), но он работал для меня, поэтому я решил поделиться им.