2012-02-03 41 views
10

我有一个单元测试失败,因为标题已经发送。但是,在这种情况下,标题是预期的。如何测试预期的标题?

如何告诉PHPUnit期望500头?

我读过this question但它没有帮助。

该方法包装在输出缓冲区内。

ob_start(); 
$foo->methodWhichSendsHeader(); 
ob_clean(); 
+1

你确定[这个答案](http://stackoverflow.com/a/190498/212940)对你的情况不正确吗? – vascowhite 2012-02-03 18:08:34

回答

19

如果您安装了xdebug,则可以使用xdebug_get_headers()获取标头。然后你可以根据需要测试它们。

$headers=xdebug_get_headers(); 

让你的阵列,它看起来像......

array(
    0 => "Content-type: text/html", 
    1 => ... 
) 

所以你需要分析每个标题行,如果你可以”标题名称从值

+0

这对于格式为 'header('Content-Type:text/html');' 的调用非常适用,但它似乎不适用于格式为 的头文件('HTTP/1.1 500 Internal Server错误');' 有无论如何得到这些头/状态代码? – Derokorian 2014-10-12 16:31:02

+0

虽然你不能从header('HTTP/1.1 500 Internal Server Error');'获得实际的头部内容,但你可以使用内置的[http_response_code()](http://php.net) /manual/en/function.http-response-code.php)来检索将返回给浏览器的HTTP状态码。 – JSmitty 2016-08-29 14:48:40

2

分离在系统上使用xdebug_get_headers,另一种方法是模拟头文件函数。

我现在正在使用以下工具,效果很好。比方说,你有这样的代码......

<?php 
header('Content-type: text/plain; charset=UTF-8'); 
... 

我更换header一个头功能,可测试是这样的......

<?php 
Testable::header('Content-type: text/plain; charset=UTF-8'); 
... 

可测试类执行如下。请注意,函数只需要在Testable::前加上。否则,他们的工作方式与通常的功能相同。

class Testable { 
    private static $headers=array(); 

    static function header($header) { 
     if (defined('UNIT_TESTING')) { 
     self::$headers[]=$header; 
     } else { 
     header($header); 
     } 
    } 

    public static function reset() { 
     self::$headers=array(); 
    } 

    public static function headers_list() { 
     if (defined('UNIT_TESTING')) { 
      return self::$headers; 
     } else { 
      return headers_list(); 
     } 
    } 
} 

现在,所有你需要做的就是定义你的测试UNIT_TESTING,但不是在生产。然后当你来测试你的头文件时,只需拨打Testable::headers_list()即可。

您当然应该为setcookie,headers_sent和其他任何发出HTTP标头的函数添加方法。

+4

是的,但这改变了测试的主题。这不好。 – 2013-12-18 18:02:15

+0

@JimmyKane - 据我所知,只不过是任何模拟。只要在生产中UNIT_TESTING没有定义,您可以将产品代码中的Testable :: header保存到调用中。有什么我在这里失踪? – 2013-12-18 19:10:53

+1

我的意思是,你必须为你的类添加一个静态函数,从而修改'Testable'类。我不想在每个发送标题的摘要中编辑和添加一个静态的,以便可测试。但这只是一种偏好。除此之外,你的答案是好的。祝你有美好的一天。 – 2013-12-18 19:33:05