我使用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中的以下函数将函数解析为建议here的帮助器:
public function clearCache($I) {
$cache = $this->getModule('Cache');
$cache->flush();
}
这似乎是文档here所建议的内容,但我收到错误"模块缓存无法连接"。看起来我需要Laravel4模块,所以我将它添加到我的acceptance.suite.yml文件中,但没有运气,我收到此错误:
SQLSTATE[28000] [1045] Access denied for user 'stephen'@'localhost' (using password: NO)
我以为我需要在配置文件中授权mysql,但这似乎也没有用。这是我的acceptance.suite.yml文件:
class_name: AcceptanceTester
modules:
enabled:
- PhpBrowser
- AcceptanceHelper
- Laravel4
config:
PhpBrowser:
url: 'http://104.131.29.69:8000/'
Laravel4:
user: 'root'
password: 'pAsSwOrD'
最后我读了this回答,似乎我实际上不应该在配置文件中包含Laravel4,而且我的帮助函数看起来应该更像这样:
public function clearCache($I) {
$L = $I->getLaravel4();
Cache::flush();
}
但我最终得到了这个错误:
Class 'Codeception\Module\Cache' not found
所以我被卡住了。谢谢!
答案 0 :(得分:1)
好的,所以我想出了如何做到这一点。显然,有一个名为cli
的模块,您可以将其包含在acceptance.suite.yml文件中,如下所示:
class_name: AcceptanceTester
modules:
enabled:
- PhpBrowser
- AcceptanceHelper
- Cli
此模块允许您在脚本中使用runShellCommand()
函数的shell命令。由于我的缓存存储在app / storage / cache /目录中的文件中,我需要执行的shell命令是:
rm app/storage/cache/*
并清除了voilá缓存。然后在测试文件中它将如下所示:
$I->runShellCommand('rm -rf app/storage/cache/*');
我决定通过将它包含在我用来登录的函数中来简化这一点,因为我知道我想在每次登录之前清除缓存我只是在AcceptanceHelper中的登录函数中包含该行,然后是在我的所有测试中均可访问。
这是一个解决方法,因为它与我正在使用的那种缓存不相关(如果我使用memcached我需要做一些不同的事情)但它对我有用所以我想我分享它。
答案 1 :(得分:1)
Artisan::call('cache:clear');
是更好的方法。