次のようなエラーが多数発生しています。
Zend_Session_Exception: Session must be started before any output has been sent to the browser; output started in /usr/local/zend/share/pear/PHPUnit/Util/Printer.php/173
アプリケーションのテスト スイートを実行するとき。これは、PHPUnit 3.5.10 および PHP 5.3.5 で発生します。
これを引き起こしている不思議で予期しない空白の出力はありません。「ブラウザーに送信される出力」は、実行されている PHPUnit テストからの実際の出力であると判断しました。PHPUnit/Util/Printer.php を開き、(PHPUnit からの出力の最初の行を実質的に停止する) で行をラップするとprint $buffer
、if (strpos($buffer, 'PHPUnit 3.5.10 by Sebastian Bergmann') === false)
最初のテストが成功します (テスト ケースがテストが成功したことを示すドットを出力するまで、次のドットが出力されたため、テストは失敗します)。
私のチームの別の開発者は、完全なテスト スイートを正常に実行できるため、アプリケーション コードの問題ではないことがわかっています。構成設定またはローカル環境の問題である必要があります。
私はすでにphp.iniをチェックして、それoutput_buffering
がオンになってimplicit_flush
いてオフになっていることを確認しました。
テストブートストラップにも追加しようとしましZend_Session::$_unitTestEnabled = true;
たが、それは役に立ちませんでした (別の開発者のマシンとそれなしの CI サーバーで動作するため、とにかく必要ではないはずです)。
エラーを無視する以外に何か提案はありますか? 私はこのようなものを見たことがなく、本当に途方に暮れています。
ありがとう!
アップデート:
問題をさらに特定するために、次のテスト スクリプトを実行して、ZF とアプリケーションを方程式から外しました。
<?php
class SessionTest extends PHPUnit_Framework_TestCase
{
public function testSession()
{
session_start();
$this->assertTrue(true);
}
}
テストは失敗します:
1) SessionTest::testSession
session_start(): Cannot send session cookie - headers already sent by (output started at /home/mmsa/test.php:1)
ただし、まったく同じテストが友人のマシンで機能します。PHP と PHPUnit の同じバージョン。