Проблемы модульного тестирования с Simpletest - PullRequest
1 голос
/ 17 марта 2011

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

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.

Ответы [ 2 ]

1 голос
/ 17 марта 2011

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

Вы можете включить его глобально в конфигурации 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() в конце файла, если вы этого не сделаете.

1 голос
/ 17 марта 2011

Эта ошибка появляется, когда вы выводили ранее (функции header ) setcookie($name,$cookie,$cookie_expires );.

Убедитесь, что у вас нет echos или html или text или чего-либо ( НЕ ДАЖЕ ПРОБЕЛ ) до <?php из setcookie($name,$cookie,$cookie_expires );.

...