Behat可重复使用的操作添加标题

时间:2016-02-29 13:01:14

标签: php symfony behat

我在Symfony2应用程序中使用Behat。

我已经做了一个可重复使用的操作来在某些场景中添加HTTP标头

/**
* @Given I am authenticated as admin
*/
public function iAmAuthenticatedAsAdmin()
{
    $value = 'Bearer xxxxxxxxxxx';

    $response = new Response();
    $response->headers->set('Authorization', $value);
    $response->send();

    return $response;
 }

当我在我的方案中添加I am authenticated as admin步骤但是它没有添加我的标题时,会调用此操作。喜欢这个

Scenario: I find all my DNS zones
  Given I am authenticated as admin
  And I send a GET request to "/api/dns"
  Then the response code should be 200

如何使用可重复使用的操作在我的方案中的请求步骤之前添加HTTP标头? 有可能吗?

感谢。

2 个答案:

答案 0 :(得分:2)

我找到了这样做的方法。

如果您使用WebApiExtension

只需在您的上下文类中导入WebApiContext,就像这样

/**
 * @param BeforeScenarioScope $scope
 *
 * @BeforeScenario
 */
public function gatherContexts(BeforeScenarioScope $scope)
{
    $environment = $scope->getEnvironment();

    $this->webApiContext = $environment->getContext('Behat\WebApiExtension\Context\WebApiContext');
}

您现在只需使用iSetHeaderWithValue

/**
 * @Given I am authenticated as admin
 */
public function iAmAuthenticatedAsAdmin()
{
    $name = 'Authorization';
    $value = 'Bearer xxxxxxxx';

    $this->webApiContext->iSetHeaderWithValue($name, $value);
}

答案 1 :(得分:0)

为什么不简单地将它存储在会话中(提示:会话应该在每个场景中销毁;看看BeforeScenario)并在需要时使用它?

因为我猜它已被添加,但是,根据下一个请求,它会在生成一对全新的请求/响应时消失(如果我正确理解您的需求)