php - php PHPUnit輸出導致Zend_Session異常

  显示原文与译文双语对照的内容
135 4

我得到了與這裡完全類似的錯誤:


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 並將 print $buffer 行包裝在 if (strpos($buffer, 'PHPUnit 3.5.10 by Sebastian Bergmann') === false) ( 有效地停止PHPUnit的第一行輸出),然後我的第一個測試。

我團隊中的另一個開發人員能夠成功地運行完整測試套件,所以我知道它在應用程序代碼中不是一個問題。 它必須是一些配置設置或者我的本地環境的問題。

我已經檢查了 php.ini 以驗證 output_buffering 已經打開,並且關閉了 implicit_flush,並且它們是。

我還嘗試了添加 Zend_Session::$_unitTestEnabled = true; 我的測試 Bootstrap 但這並沒有幫助( 因為它在其他開發者和我們的CI伺服器上工作,沒有它,所以不應該有必要) 。

除了忽略錯誤之外的任何建議? 我從未看到過這樣的事情而且我真的loss 。

謝謝!

更新:

為了進一步隔離問題,我通過執行下面的測試腳本從方程中獲取了sdl和應用程序:


<?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的相同版本。

时间: 原作者:

111 5

使用-stderr標誌,( 。較新版本可以使用 --stderr ) e.g. 運行 phpunit


 phpunit -stderr mytest.php


 # or


 phpunit --stderr mytest.php



這將指示phpunit輸出為 stderr,防止它中斷 HTTP header 生成。

這是可以能的測試在你的朋友的機器,因為他的輸出緩衝啟用( 雖然我不確定這是否與CLI上下文相關) 。

原作者:
138 2

我認為更好的方法是使用


Zend_Session::$_unitTestEnabled = true;



在測試 Bootstrap 中使用這裡方法可以防止這裡錯誤。

128 1

如果系統上使用的php二進位文件是CGI而不是CLI版本,那麼 session_start 真的會嘗試設置 Cookies 。

你可以通過調用 php_sapi_name 檢查你正在使用的SAPI 。

原作者:
78 4

我與另一個項目有同樣的問題,我發現問題是,導致輸出過快,因為在運行測試之前。

將以下兩行添加到 bootstrap.php:


ini_set('session.use_cookies', 0);


ini_set('session.cache_limiter', '');



這應該防止在測試套件運行前發送郵件頭。

原作者:
...