Symfony PHPUnit:无法启动会话,因为标头已发送

Loi*_*yeu 3 php phpunit symfony php-8.1 symfony6

版本:

  • PHP:8.1
  • PHP 单元:9.5.21
  • 交响乐6.1

当 PhpUnit 运行以下测试时,我收到有关会话无法启动的错误。有谁知道这个问题以及如何解决它?

以下主题无法回答我的问题,或者建议的解决方案对我不起作用:

我尝试了第二个链接建议的解决方案:@session_start()@runInSeparateProcess没有任何效果。也许我只是误解了我的问题,但我现在被困了一个星期。

protected function setUp(): void
{
  @session_start();
  parent::setUp();
}

/**
 * @runInSeparateProcess
 */
public function testLoginFailure(): void
{
    $client = static::createClient();
    $crawler = $client->request('GET', '/login');

    $form = $crawler->selectButton('Login')->form();

    $form['email']->setValue('bob@gmail.com');
    $form['password']->setValue('123abcABC%');

    $crawler = $client->submit($form);
    $this->assertResponseIsSuccessful();
}
Run Code Online (Sandbox Code Playgroud)
<!-- Failed to start the session because headers have already been sent by &quot;C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\Util\Printer.php&quot; at line 104. (500 Internal Server Error) -->

C:\Users\cimba\Documents\project\vendor\symfony\framework-bundle\Test\BrowserKitAssertionsTrait.php:142
C:\Users\cimba\Documents\project\vendor\symfony\framework-bundle\Test\BrowserKitAssertionsTrait.php:33
C:\Users\cimba\Documents\project\tests\InternalLoginTest.php:51
C:\Users\cimba\Documents\project\bin\phpunit:11

Caused by
ErrorException: Failed to start the session because headers have already been sent by "C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\Util\Printer.php" at line 104. in C:\Users\cimba\Documents\project\vendor\symfony\http-foundation\Session\Storage\NativeSessionStorage.php:135
Stack trace:
#0 C:\Users\cimba\Documents\project\vendor\symfony\framework-bundle\Test\BrowserKitAssertionsTrait.php(33): Symfony\Bundle\FrameworkBundle\Test\WebTestCase::assertThatForResponse(Object(Symfony\Component\HttpFoundation\Test\Constraint\ResponseIsSuccessful), '')
#1 C:\Users\cimba\Documents\project\tests\InternalLoginTest.php(51): Symfony\Bundle\FrameworkBundle\Test\WebTestCase::assertResponseIsSuccessful()
#2 C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\Framework\TestCase.php(1545): App\Tests\InternalLoginTest->testLoginFailure()
#3 C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\Framework\TestCase.php(1151): PHPUnit\Framework\TestCase->runTest()
#4 C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\Framework\TestResult.php(726): PHPUnit\Framework\TestCase->runBare()
#5 C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\Framework\TestCase.php(903): PHPUnit\Framework\TestResult->run(Object(App\Tests\InternalLoginTest))
#6 C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\Framework\TestSuite.php(670): PHPUnit\Framework\TestCase->run(Object(PHPUnit\Framework\TestResult))
#7 C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\Framework\TestSuite.php(670): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))
#8 C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\TextUI\TestRunner.php(673): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))
#9 C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\TextUI\Command.php(143): PHPUnit\TextUI\TestRunner->run(Object(PHPUnit\Framework\TestSuite), Array, Array, true)
#10 C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\TextUI\Command.php(96): PHPUnit\TextUI\Command->run(Array, true)
#11 C:\Users\cimba\Documents\project\bin\phpunit(11): PHPUnit\TextUI\Command::main()
#12 C:\Users\cimba\AppData\Local\Temp\ide-phpunit.php(224): require_once('C:\\Users\\cimba\\...')
#13 C:\Users\cimba\AppData\Local\Temp\ide-phpunit.php(173): IDE_PHPUnit_Loader::loadByAutoloader('C:\\Users\\cimba\\...')
#14 C:\Users\cimba\AppData\Local\Temp\ide-phpunit.php(228): IDE_PHPUnit_Loader::init()
#15 {main}
Run Code Online (Sandbox Code Playgroud)

框架.yaml

<!-- Failed to start the session because headers have already been sent by &quot;C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\Util\Printer.php&quot; at line 104. (500 Internal Server Error) -->

C:\Users\cimba\Documents\project\vendor\symfony\framework-bundle\Test\BrowserKitAssertionsTrait.php:142
C:\Users\cimba\Documents\project\vendor\symfony\framework-bundle\Test\BrowserKitAssertionsTrait.php:33
C:\Users\cimba\Documents\project\tests\InternalLoginTest.php:51
C:\Users\cimba\Documents\project\bin\phpunit:11

Caused by
ErrorException: Failed to start the session because headers have already been sent by "C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\Util\Printer.php" at line 104. in C:\Users\cimba\Documents\project\vendor\symfony\http-foundation\Session\Storage\NativeSessionStorage.php:135
Stack trace:
#0 C:\Users\cimba\Documents\project\vendor\symfony\framework-bundle\Test\BrowserKitAssertionsTrait.php(33): Symfony\Bundle\FrameworkBundle\Test\WebTestCase::assertThatForResponse(Object(Symfony\Component\HttpFoundation\Test\Constraint\ResponseIsSuccessful), '')
#1 C:\Users\cimba\Documents\project\tests\InternalLoginTest.php(51): Symfony\Bundle\FrameworkBundle\Test\WebTestCase::assertResponseIsSuccessful()
#2 C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\Framework\TestCase.php(1545): App\Tests\InternalLoginTest->testLoginFailure()
#3 C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\Framework\TestCase.php(1151): PHPUnit\Framework\TestCase->runTest()
#4 C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\Framework\TestResult.php(726): PHPUnit\Framework\TestCase->runBare()
#5 C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\Framework\TestCase.php(903): PHPUnit\Framework\TestResult->run(Object(App\Tests\InternalLoginTest))
#6 C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\Framework\TestSuite.php(670): PHPUnit\Framework\TestCase->run(Object(PHPUnit\Framework\TestResult))
#7 C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\Framework\TestSuite.php(670): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))
#8 C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\TextUI\TestRunner.php(673): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))
#9 C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\TextUI\Command.php(143): PHPUnit\TextUI\TestRunner->run(Object(PHPUnit\Framework\TestSuite), Array, Array, true)
#10 C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\TextUI\Command.php(96): PHPUnit\TextUI\Command->run(Array, true)
#11 C:\Users\cimba\Documents\project\bin\phpunit(11): PHPUnit\TextUI\Command::main()
#12 C:\Users\cimba\AppData\Local\Temp\ide-phpunit.php(224): require_once('C:\\Users\\cimba\\...')
#13 C:\Users\cimba\AppData\Local\Temp\ide-phpunit.php(173): IDE_PHPUnit_Loader::loadByAutoloader('C:\\Users\\cimba\\...')
#14 C:\Users\cimba\AppData\Local\Temp\ide-phpunit.php(228): IDE_PHPUnit_Loader::init()
#15 {main}
Run Code Online (Sandbox Code Playgroud)

Ale*_*nov 6

对于测试环境

配置/包/测试/framework.yaml

framework:
    test: true
    session:
        storage_factory_id: session.storage.factory.mock_file
Run Code Online (Sandbox Code Playgroud)