헤더가 이미 전송되었으므로 실패한 단위 테스트가 있습니다. 그러나이 시나리오의 헤더가 필요합니다.예상 헤더를 테스트하는 방법은 무엇입니까?
500 헤더를 예상하도록 PHPUnit에게 어떻게 말합니까?
나는 this question을 읽었지만 도움이되지 않았습니다.
이 메서드는 출력 버퍼에 래핑됩니다.
ob_start();
$foo->methodWhichSendsHeader();
ob_clean();
헤더가 이미 전송되었으므로 실패한 단위 테스트가 있습니다. 그러나이 시나리오의 헤더가 필요합니다.예상 헤더를 테스트하는 방법은 무엇입니까?
500 헤더를 예상하도록 PHPUnit에게 어떻게 말합니까?
나는 this question을 읽었지만 도움이되지 않았습니다.
이 메서드는 출력 버퍼에 래핑됩니다.
ob_start();
$foo->methodWhichSendsHeader();
ob_clean();
xdebug가 설치된 경우 xdebug_get_headers()를 사용하여 헤더를 가져올 수 있습니다. 그런 다음 필요에 따라 테스트 할 수 있습니다.
$headers=xdebug_get_headers();
당신과 같은 배열을 가져옵니다 ...
array(
0 => "Content-type: text/html",
1 => ...
)
그래서 당신은 '당신이 할 수있는 경우 값
이 형식은 헤더 ('Content-Type : text/html'); 형식의 호출에 유용하지만 형식이 인 호출에서는 작동하지 않는 것 같습니다. HTTP (HTTP/1.1 500 Internal Server 오류 ');' 이 헤더/상태 코드를 가져 오는 방법은 있습니까? – Derokorian
'header ('HTTP/1.1 500 Internal Server Error');'에서 실제 헤더 내용을 가져올 수는 없지만 내장 된 [http_response_code()] (http://php.net /manual/en/function.http-response-code.php) 브라우저로 리턴 될 HTTP 상태 코드를 검색하십시오. – JSmitty
에서 헤더 이름을 분리하기 위해 각 헤더 행을 구문 분석해야합니다 시스템에서 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 헤더를 발행하는 기타 기능에 대한 메소드를 추가해야합니다.
그래도 테스트 주체가 수정됩니다. 그 좋지 않다. –
@ 지미 케인 (JimmyKane) - 내가 말할 수있는 한 모든 모의 행위는 허용되지 않습니다. 프로덕션 UNIT_TESTING이 정의되어 있지 않으면 프로덕션 코드에서 Testable :: header에 대한 호출을 남길 수 있습니다. 내가 여기서 누락 된 것이 있습니까? –
내가 말한 것은 클래스에 정적 함수를 추가해야하므로'Testable' 클래스를 수정해야한다는 것입니다. 테스트 할 수 있도록 헤더를 보내는 모든 추상에 정적을 추가하고 편집하고 싶지 않습니다. 그러나 그것은 단지 기본 설정 일뿐입니다. 그 외에 당신의 대답은 좋다. 좋은 하루 되세요. –
귀하의 경우 [이 답변] (http://stackoverflow.com/a/190498/212940)이 올바르지 않습니까? – vascowhite