【PHPUnit】header関数を使用する時には@runInSeparateProcess
header関数はその実行前に何らかの標準出力があるとエラーになる。
(Cannot modify header information)
PHPUnit はテスト中のメッセージを逐一標準出力しているため、テスト内でheader関数を実行するとエラーになるというわけ。
覚えておいて頂きたいのは、 header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。
http://php.net/manual/ja/function.header.php
実際にコードを書いてみると、「テスト中のメッセージを逐一標準出力している」(= headers_sent関数がtrue)
なのは指摘の通りだったけれど、headers_list関数は空配列だった。
出力しているのになぜ空配列!?
HTTP出力についてきちんと向き合わないとなあ。。
#ここはコードに語ってもらう方が分かりやすいので。。
<?php class SessionTest extends PHPUnit_Extensions_OutputTestCase { public function test1(){ $this->assertSame(headers_sent(), true); print var_dump(headers_list()); } /** * @runInSeparateProcess */ public function test2(){ $this->assertSame(headers_sent(), false); } }
結果↓
.array(0) { } Time: 5 seconds, Memory: 4.75Mb OK (2 tests, 2 assertions)