У меня есть эта странная проблема, когда я вызываю parent::setUp()
в моем классе TestCase для модульного тестирования класса, когда я запускаю phpunit, чтобы он меня выбрал для этой ошибки:
1) MatchRequestRepositoryTest :: test_find_requests_by_match_id ErrorException: session_start (): Не удается отправить cookie сеанса – уже отправленные заголовки (вывод запущен в /var/www/project.dev/vendor/phpunit/phpunit/PHPUnit/TextUI/TestRunner.php:459)
В чем проблема? Спасибо за любую помощь.
Проблема в том, что у вас есть код, возможно, глубоко в используемой структуре, который вызывает session_start()
. Это, в свою очередь, хочет отправить cookie. Но PHPUnit уже начал писать вывод в stdout.
Ключом к пониманию здесь является то, что это всего лишь единичный тест, никто не заботится о заголовке. Поэтому просто подавляйте сообщение об ошибке. И способ, которым вы это делаете, без изменения системного теста, заключается в вызове session_start () в вашем собственном модульном тесте (либо перед parent::setUp()
либо внутри этой функции setUp). И используйте префикс @
для подавления ошибок. например
function setUp(){ @session_start(); parent::setUp(); ... }
Лучший способ сделать это в PHPUnit – отправить вывод в stderr вместо stdout, как показано в этом ответе .
phpunit --stderr