我正在尝试使用 codeception 和 PhpBrowser(它使用 Mink 和 Goutte 驱动程序)测试我的 ajax 脚本。
我的 ajax 脚本需要经过身份验证的会话才能执行,并且会话是通过我的登录页面创建的。
我在获取 PhpBrowser/Link 会话时遇到问题,在登录后仍然存在。
我创建了一个 PhpBrowser Helper 函数来覆盖 _initialize,这样我就可以让 https 在我的测试服务器上使用自签名证书,如下所示:
public function _initialize()
{
$client = new \Behat\Mink\Driver\Goutte\Client();
$driver = new \Behat\Mink\Driver\GoutteDriver($client);
$curl_config = array_merge($this->curl_defaults, $this->config['curl']);
array_walk($curl_config, function($a, &$b) { $b = "curl.$b"; });
$curl_config['ssl.certificate_authority']=false;
$client->setClient(new \Guzzle\Http\Client('', $curl_config));
$client->followRedirects(true);
$this->session = new \Behat\Mink\Session($driver);
\Codeception\Util\Mink::_initialize();
}
现在,当我运行验收测试时,登录似乎正常工作,并且重定向基于 apache access_logs 发生,但 PHPSESSID cookie 不会持续存在,因此登录后我的所有访问请求都是未经授权的。
我尝试通过比较
$I->getCurrentUrl()
$I->getResponseHeaders()
重定向之前和之后。
currentUrl() 返回值永远不会到达重定向目标,尽管 apache access_logs 另有说明。
getResponseHeaders() 在表单提交后返回一个 PHP_SESSID cookie,但对于之后的所有请求,它并不存在。
任何想法/猜测为什么在登录期间创建的会话在重定向后没有持续存在?
我是否需要对 Mink 会话进行任何特殊配置以使它们遵循重定向,还是我做错了什么?
在此先感谢您的帮助!
-埃德