Symfony 4:WebTestCase 失败(无法启动会话)

bar*_*892 1 php phpunit symfony

我正在尝试设置一个简单的方法WebTestCase,它GET使用 Symfony 4(和"phpunit/phpunit": "^6.5")向给定的 URL 发出请求。但是,测试失败:

无法启动会话,因为标头已经由 \vendor\phpunit\phpunit\src\Util\Printer.php 发送;在第 112 行。(500 内部服务器错误)

测试类:

class ControllerTest extends WebTestCase
{
    public function testGetArticles()
    {
        $client = static::createClient();
        $client->request('GET', '/articles');
        $this->assertEquals(Response::HTTP_OK, $client->getResponse()->getStatusCode());
    }
}
Run Code Online (Sandbox Code Playgroud)

控制器(包含articles路由:

/** @Route(path="articles", name="article_list") */  
public function article_list(Request $request)
{
    return $this->render("article/list.html.twig", array(
        "articles" => $this->entityManager->getRepository("App:Article")->getArticles()
    ));
}
Run Code Online (Sandbox Code Playgroud)

框架.yaml:

framework:
    secret: '%env(APP_SECRET)%'
    csrf_protection: ~
    session:
        # With this config, PHP's native session handling is used
        handler_id: ~
Run Code Online (Sandbox Code Playgroud)

这些测试在 Symfony 3 中运行良好,在 SF 4 中则不然。这个测试或配置有什么问题?

小智 5

您必须取消注释 config\Packages\test\framework.yaml 中的 session 部分。

session:
        storage_id: session.storage.mock_file
Run Code Online (Sandbox Code Playgroud)

  • 1a)这记录在此处:https://symfony.com/doc/4.4/reference/configuration/framework.html#storage-id 1b)我能找到的有关此功能的最佳信息在存储库中:https:// github.com/symfony/symfony/blob/8f081fe30697b4e053d68f1271d5e27c26a1aa2e/src/Symfony/Component/HttpFoundation/Session/Storage/MockFileSessionStorage.php 2a) 从 5.3 开始已弃用。使用 `storage_factory_id: session.storage.factory.mock_file` 2b) 请参阅:https://symfony.com/doc/current/reference/configuration/framework.html#storage-factory-id (3认同)