2012-03-20 4 views
0

送信され、私が手:私はPhingのを介して実行するときヘッダが既に埋め合わせプラグインを使用して

Cannot modify header information - headers already sent by (output started at C:\wamp\bin\php\php5.3.8\pear\PHPUnit\Util\Printer.php:173) 

この同じテストが正常に動作します。私はPhderがphpunitコマンドラインから--stderrスイッチを使って同じテストを実行すると正常に動作するので、Phingが標準出力に出力すると仮定しています。 --stderrスイッチを使わないでMakeGoodと同じ方法で失敗します。

これを回避する方法や、MakeGoodプラグインのstderrに出力を設定する方法はありますか?

また、これは何の違いを作るべきではありませんが、これはZend Frameworkのプロジェクトであり、私は私のテストのブートストラップに

Zend_Session::$_unitTestEnabled = true; 

を設定しました。

答えて

2

PHPUnitはヘッダを画面に表示し、その時点でPHPはヘッダを送信できません。

回避策は、テストを独立したプロセスで実行することです。

$ phpunit FooTest.php 
PHPUnit 3.6.10 by Sebastian Bergmann. 

. 

Time: 1 second, Memory: 9.00Mb 

OK (1 test, 0 assertions) 

キーが@runInSeparateProcess注釈である:ここではこれがになります

<?php 

class FooTest extends PHPUnit_Framework_TestCase 
{ 
    /** 
    * @runInSeparateProcess 
    */ 
    public function testBar() 
    { 
     header('Location : http://foo.com'); 
    } 
} 

例です。

PHPUnitの実行中に--process-isolationフラグを使用することもできます。

Zend Frameworkの周辺でコードを書く場合は、header()を直接使用するべきではありません。 Zend_Http_Responseを使うべきです。

MVCレベルテストを行っている場合は、Zend_Test_PHPUnitをご覧ください。

+0

応答に感謝します。残念ながら、 '@ runInSeparateProcess'アノテーションや--process-isolationフラグを使用すると、MakeGoodは何もしないで座ってしまいます。唯一のコンソール出力はSebastian BergmannのPHPUnit 3.5.15です。私は実際にZend_Test_PHPUnitを使用しています。あなたがZend_Http_Responseを使って何を意味するかわかりません。ここに私のコントローラーアクションがあります。パブリック関数robotsAction(){header( 'Content-type:text/plain'); $ this-> _ helper-> layout() - > disableLayout(); } – Luke

+1

header()への呼び出しを** $ this-> getResponse() - > setHeader( 'Content-type'、 'text/plain'); ** – SamHennessy

+0

に置き換えてください。 MakeGoodは今、満足しています。Zend_Http_Responseに関するヒントをありがとう。 :) – Luke

関連する問題