如何在 codeception 的 acceptance.suite.yml 中使用 PhpBrowser 的 "cookies" 设置?

How to use the "cookies" setting for PhpBrowser in codeception's acceptance.suite.yml?

我试过用谷歌搜索这个但找不到答案所以我在这里发帖。

我正在使用 PHP 5.5.9 在 Cloud9 IDE 上试用 codeception 2.1.5,查看编写验收测试并配置我的 acceptance.suite.yml 文件。

我正在尝试将 cookie 包含在 PhpBrowser 发出的请求中,如 codeception PhpBrowser page 中所述。我想我可以用 acceptance.suite.yml 中的 "cookies" 设置来做到这一点。

acceptance.suite.yml

# Codeception Test Suite Configuration
#
# Suite for acceptance tests.
# Perform tests in browser using the WebDriver or PhpBrowser.
# If you need both WebDriver and PHPBrowser tests - create a separate suite.

class_name: AcceptanceTester
modules:
    enabled:
        - PhpBrowser:
            url: https://dm1-cboudreausf.c9users.io
            cookies: 
                 c9_user_cookie:
                    Name: c9.live.user.sso
                    Value: somevaluehere
                    Path: /
                    Domain: .c9users.io
         - \Helper\Acceptance

这是我的 HomepageCept.php:

<?php 
$I = new AcceptanceTester($scenario);
$I->wantTo('ensure the homepage renders correctly');
$I->amOnPage('/'); 
$I->see('welcome');

但是当我 运行 我在调试模式下的测试是这样的:

php codecept.phar run --debug

我可以看到没有请求 cookie:

Ensure the homepage renders correctly (HomepageCept)
Scenario:
* I am on page "/"

  [Page] /
  [Response] 302
  [Request Cookies] []
  [Response Headers] {"Location":["https://c9users.io/_user_content/authorize?redirect=https%3A%2F%2Fdm1-cboudreausf.c9users.io%2F"],"Date":["Mon, 21 Dec 2015 22:38:44 GMT"],"Transfer-Encoding":["chunked"],"X-BACKEND":["apps-proxy"],"Content-Type":["text/html"]}
  [Redirecting to] https://c9users.io/_user_content/authorize?redirect=https%3A%2F%2Fdm1-cboudreausf.c9users.io%2F

正确的语法是什么?

Cookies 参数不由 PhpBrowser 处理,而是传递给 Guzzle HTTP 客户端。

如果你 运行 你的测试和 PHP 5.4,那么你使用 Guzzle 5.3,http://docs.guzzlephp.org/en/5.3/clients.html?highlight=cookies

Types: bool / array / GuzzleHttp\Cookie\CookieJarInterface

我不知道您使用的格式是否适用于 Guzzle 5.3,但键值对应该有效

cookies: 'c9.live.user.sso': 'somevaluehere'

如果您 运行 在较新版本的 PHP 上进行测试,那么您可能使用 Guzzle 6 http://docs.guzzlephp.org/en/latest/request-options.html#cookies
You must specify the cookies option as a GuzzleHttp\Cookie\CookieJarInterface or false.

我认为 cookies 选项无法与 Guzzle 6 一起使用,因此我在 Github 中提出了这个问题:https://github.com/Codeception/Codeception/issues/2653