【问题标题】:Getting status code response headers for unit tests获取单元测试的状态码响应标头
【发布时间】:2014-10-12 16:35:52
【问题描述】:

我正在阅读this question,因此我可以成功测试表单的标题:

header('X-Something: value');
header('Content-Type: text/html');

但是,我有设置响应代码的代码,我想验证这在我的单元测试中是否正常工作,但它们不会在 xdebug_get_headers 返回值中返回。调用看起来像:

header('HTTP/1.1 201 Created');
header('HTTP/1.1 422 Unprocessable Entity');

是否也可以检查此标头?还是我只需要依靠其余的返回值来证明我的控制器正在工作

【问题讨论】:

    标签: php phpunit


    【解决方案1】:

    您可以使用http_response_code() 函数返回您设置的值:

    print_r("Response Code: " . http_response_code());
    

    结果:

    Response Code: 422
    

    文档:http_response_code() - PHP 5.4.0+

    【讨论】:

    • 谢谢!由于某种原因,我找不到这个。无论如何要获取文本,即“无法处理的实体”
    • 不客气!有几种方法可以获得完整的响应代码。最快的方法是使用另一个不起眼的 php 函数 ( $http_response_headers ) — 这是一个快速的 example
    • 似乎没有办法做到这一点。 $http_response_headers 做了完全不同的事情,与“传出”标题无关。
    • @l'L'l,不,不是。 :)
    • @IanBytchek,很抱歉之前误解了您的评论。使用$http_response_headers 的流方法确实适用于请求,但不适用于直接传出响应。在我看来,确实应该有一个函数或方法来获得完整的响应——所以希望迟早会出现一个类。
    【解决方案2】:

    如果我理解正确,那么您正在寻找headers_list(),它返回已发送(或准备发送)的响应标头列表,请参阅docs。执行以下操作:

    header("X-Sample-Test: foo");
    header('Content-type: text/plain');
    
    var_dump(headers_list());
    

    会输出这个:

    array(3) {
        [0]=>
        string(23) "X-Powered-By: PHP/5.1.3"
        [1]=>
        string(18) "X-Sample-Test: foo"
        [2]=>
        string(24) "Content-type: text/plain"
    }
    

    【讨论】:

    • 我试过 headers_list 但它产生了同样的问题,它只返回格式为 header('Key: Value');
    • 抱歉,我现在明白你的意思了。不过真的很奇怪,如果我是你,我会在bugs.php.net 提出问题,以澄清这一点。另一方面,这有点类似于this answer——你对关于 Behat 的部分感兴趣。用 PHPUnit 测试你的控制器并不是最好的主意……
    猜你喜欢
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    相关资源
    最近更新 更多