Cannot send session cookie - headers already sent PHPUnit / Laravel

laravel-4, php, phpunit, unit-testing

Solution

(UPDATE: Thanks to comment by Louis Charette, this will only work in php 7.1 and earlier (and reading the bug report, it sounds like a regression they don't intend to fix. The better solution is therefore Jeff Puckett's (https://stackoverflow.com/a/38045422/841830), of giving the `--stderr` flag on the commandline to `phpunit`. This keeps stdout for your code, stderr for phpunit, and so they don't clash.)

The problem is that you have some code, perhaps deep in the framework you use, that calls `session_start()`. That, in turn, wants to send a cookie. But PHPUnit has already started writing output to stdout.

The point to understand here is that this is just a unit test, no-one cares about the header. So just suppress the error message. And the way you do that, without altering the system-under-test, is to call session_start() in your own unit test (either before `parent::setUp()` or inside that setUp function). And use the `@` prefix to suppress errors. e.g.

function setUp() {
  @session_start();
  parent::setUp();
  ...
}

Problem

I have this strange problem when i call the `parent::setUp()` on my TestCase class for unit test a class when i run phpunit it throw me this error: 1) MatchRequestRepositoryTest::test_find_requests_by_match_id ErrorException: session_start(): Cannot send session cookie - headers already sent by (output started at /var/www/project.dev/vendor/phpunit/phpunit/PHPUnit/TextUI/TestRunner.php:459) What can be the problem? Thanks for any help.

Original source

Related problems