2011-03-17 3 views
1

Я использую PHP и simpletest для модульного тестирования. Мои тесты работают хорошо, пока я не попытаться установить кукиПроблемы с тестированием модулей с Simpletest

try{ 
    setcookie($name,$cookie,$cookie_expires); 
}catch Exception($e){ 
    blah 
} 

Исключение брошено, потому что simpletest уже выписана информацию заголовка, так что я получаю следующее:

Неожиданная ошибка PHP [Не удается изменить информацию в заголовке - заголовки уже прислал (выход начался в /tests/simpletest/reporter.php:43)] тяжесть [E_WARNING] в [blah_code.php линии 280]

Я видел смутные объяснения по ловле это с $this->expectException(new Exception());, но нет дополнительной документации или примеров, которые работают. Может ли кто-нибудь предоставить рабочий пример или указать мне документацию? Быть ясным. Это не мой код, производящий выход, а скорее SimpleTest.

ответ

1

Один из способов обойти это с помощью буферизации вывода.

Вы можете включить его глобально в конфигурации PHP (и, возможно, в .htaccess), или вы можете использовать ob_start() и связанные с ним функции (ob_get_clean(), ob_end_flush() и т.д.). Например:

ob_start(); 
// your SimpleTest here. 
// your header/ cookie manipulation here. 

И потом:

ob_end_clean(); // Stop buffering and dump everything (don't echo). 
ob_end_flush(); // Stop buffering and echo out the buffer. 
ob_get_clean(); // Stop buffering and return everything as a string. 

или любой из других связанных с этим функций. Я считаю, что PHP вызывает ob_flush() в конце файла, если вы этого не сделаете.

+0

Аналогичная проблема здесь ... просто добавление ob_start() в самом начале файла ничего не меняет. –

1

Вы получаете эту ошибку, когда у вас есть выход до (header функций) setcookie($name,$cookie,$cookie_expires);.

Убедитесь, что вы не имеете echos или html или text или что-нибудь (даже не КОСМИЧЕСКИЙ) перед <?php из setcookie($name,$cookie,$cookie_expires);.

+0

Простой тест на то, что он создает выход, а не мой код. Вот почему я задал этот вопрос здесь. – Jim

+0

@ Jim Извините, я серьезно неправильно понял ваш вопрос. –

+0

@Jim Я думаю, что вы используете этот 'simpletest' перед выводом чего-либо. –