您域外的Codeception Acceptance和Phantomjs Cookie(Google oAuth)

时间:2015-05-25 18:23:50

标签: codeception

我正处于一个十字路口,我有"解决方案"但我不确定它是最好的方法。

我的部分应用程序是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抛出一些奇怪的错误。

有什么想法吗?

谢谢和最诚挚的问候。

0 个答案:

没有答案