我正处于一个十字路口,我有"解决方案"但我不确定它是最好的方法。
我的部分应用程序是oAuth登录,我也想测试它(Acceptance)。 我对我将用于登录的oAuth提供商进行了虚假记录。问题是Cookies。
我正在使用Phantomjs。即使我在我的yml文件中使用clear_cookies:true我也遇到了这个问题,我的测试无法登录,因为Google记得我。 测试非常简单:
public function login_with_oauth(AcceptanceTester $I)
{
$I->amOnPage('/auth/logout');
$I->amOnPage('/');
$I->click(['id' => 'login']);
$I->click(['id' => 'btn_login_google']);
@$I->fillField(['id' => 'Email'], $this->login);
$I->fillField(['id' => 'Passwd'], $this->password);
$I->click(['id' => 'signIn']);
$I->waitForText($this->name);
$I->seeInCurrentUrl('/home');
}
第一次运行,第二次没有,因为Google记得登录用户,因此它不再显示登录名和密码框。
如果我点击google注销网址(accounts.google.com/logout),它会将用户注销,但下次我尝试登录时会记住我的EMAIL(因此不是我的密码),电子邮件字段将是灰色(禁用)所以Codeception不能填充它并去香蕉。
即使clear_cookies:true工作,我也会遇到一个问题,对于我共享同一个Session的所有其他测试Cests,我必须登录_before(),这将增加大约20%的时间来运行测试
我提出的解决方案是:在每次测试之前简单地重启幻像。由于幻影是由supervisord管理的,所以就像在〜/ bashrc中使用别名一样简单,就像这样:
alias codecept=' supervisorctl stop phantomjs && supervisorctl start phantomjs && vendor/bin/codecept'
这样我可以在每次测试之间保留我的cookie,并且我可以确保我的oAuth提供者cookie也被清除。
我也尝试在oAuth cest的__construct上从php中重启幻像,但这会让Codecept抛出一些奇怪的错误。
有什么想法吗?
谢谢和最诚挚的问候。