如何使用Behat和BrowserKitDriver处理StreamedResponse?

时间:2015-08-11 17:42:45

标签: symfony behat

我有一些控制器代码会返回包含Excel文件的StreamedResponse

我的behat测试正在使用Symfony2Extension及其BrowserKitDriver而不是基于浏览器的驱动程序运行。

我有一个看起来像这样的场景:

Scenario: Download link visible and returns success code
    When I am on the report page
    And I follow "Download report"
    Then the response status code should be 200

"下载报告" link返回一个StreamedResponse的控制器。在这个简单的测试中,我对响应的内容不感兴趣,只是生成它时没有错误。

以上场景运行并通过!但是,在And I follow "Download report"步骤之前(无论是使用标准格式化程序还是progress步骤),behat输出30行左右的二进制"垃圾"到屏幕,可能是流式响应的一部分(或全部)。

鉴于这种情况正在消失,我只是想摆脱"垃圾"输出。这可能吗?

有一个类似的SO问题here,但它使用PHP的get_headers方法,假设我有一个要浏览的网址 - 事实并非如此据我所知,Symfony驱动程序实际上并没有发出HTTP请求。

在另一个项目中,我通过添加BinaryFileResponse而返回BinaryFileResponse::trustXSendfileTypeHeader();"outsourced" the streaming to nginx但是我想知道是否有办法使用正常的StreamedResponse代替。

1 个答案:

答案 0 :(得分:1)

我使用稍微修改过的“当我按下按钮时”步骤来处理流响应来清理控制台输出

/**
 * @When /^(?:|I )press "(?P<button>(?:[^"]|\\")*)" handling a streamedresponse$/
 *
 * @throws
 */
public function pressButtonWithStreamedResponse($button)
{
    ob_start();

    $button = $this->fixStepArgument($button);
    $this->getSession()->getPage()->pressButton($button);

    return ob_get_clean();
}