在 phpunit 功能测试中生成 csrf 令牌时,Symfony 弃用 SessionTokenStorage

Gar*_*eld 5 php phpunit symfony

我使用的是 symfony 5.4

我不明白 symfony 真正需要什么来纠正这个弃用:

从 symfony/security-csrf 5.3 开始:在没有会话的情况下使用“Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage”没有效果,已被弃用。它将在 Symfony 6.0 1x 中从 App\Tests\Controller 的 MeansCablesControllerTest::TestDatagridAdd 中抛出“Symfony\Component\HttpFoundation\Exception\SessionNotFoundException”

我在测试/控制器/MeansBenchesControllerTest.php(WebTestCase)中的函数:

function datagridAddUpdate($controllerName, $dataArray)
    {
        $client = static::createClient();
        
        $usersRepository = static::getContainer()->get(UsersRepository::class);
        $testUserAdmin = $usersRepository->find(1);
        
        $client->loginUser($testUserAdmin);

        $csrfToken = $client->getContainer()->get('security.csrf.token_manager')->getToken($controllerName.'Token_item');

        $dataArray['_token'] = $csrfToken;

        $crawler = $client->request('POST', '/datagridAddUpdate/'.$controllerName,$dataArray, [], ['HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest']);

        $this->assertResponseIsSuccessful('Status code 2xx pour datagridAdd : '.$controllerName);

    }
Run Code Online (Sandbox Code Playgroud)

Bar*_*art 2

在构建表单之前运行此命令将确保有一个可用的会话:

$request = new Request();
$request->setSession(new Session(new MockArraySessionStorage()));

self::getContainer()->get(RequestStack::class)->push($request);
Run Code Online (Sandbox Code Playgroud)