gpt4 book ai didi

symfony - 使用 Symfony 的 flashBag session 进行单元测试

转载 作者:行者123 更新时间:2023-12-04 23:59:14 24 4
gpt4 key购买 nike

我正在用单元测试在 Silex 中创建一个应用程序。

针对常规 session 处理程序运行单元测试工作正常:

$app->register(new Silex\Provider\SessionServiceProvider(), array(
'session.storage.options' => array(
'cookie_lifetime' => 1209600, // 2 weeks
),
));

并在我的单元测试中设置此标志:
$this->app['session.test'] = true;

如果我没有设置 session.test 标志,我的单元测试会抛出一个 headers already sent 错误并且都失败了。有了它,我的测试运行良好。

问题是我正在尝试使用 flashBag 功能( session 信息仅持续到第一个请求然后被删除):
$foo = $app['session']->getFlashBag()->all();

flashBag 似乎不尊重 session.test 标志,并尝试发送 header ,这导致我的所有单元测试失败:

24) Yumilicious\UnitTests\Validator\PersonAccountTest::setConstraintsPassesWithMinimumAttributes RuntimeException: Failed to start the session because headers have already been sent.

/webroot/yumilicious/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php:142 /webroot/yumilicious/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php:262 /webroot/yumilicious/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Session.php:240 /webroot/yumilicious/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Session/Session.php:250 /webroot/yumilicious/src/app.php:38 /webroot/yumilicious/tests/Yumilicious/UnitTests/Base.php:13 /webroot/yumilicious/vendor/silex/silex/src/Silex/WebTestCase.php:34 /webroot/yumilicious/vendor/EHER/PHPUnit/src/phpunit/phpunit.php:46 /webroot/yumilicious/vendor/EHER/PHPUnit/bin/phpunit:5



我把它缩小到这一点代码: https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php#L259

具体来说,第 262 行。注释掉该行可以让我的测试正常工作并且全部通过绿色。

我已经搜索了很多来让它工作,但我没有任何运气。我认为这是因为 flashBag 的东西是新的(https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/Session/Session.php#L305)并且旧的方法正在被弃用。

任何关于让我的单元测试工作的建议都会很棒。

最佳答案

为了进行测试,您需要更换 session.storage具有 MockArraySessionStorage 实例的服务:

use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage;

$app['session.storage'] = new MockArraySessionStorage();

这是因为 native 试图通过 header 发送 cookie。这当然在测试环境中失败了。

编辑:现在有一个 session.test您应该设置为 true 的参数。这将自动使 session 使用模拟存储。

关于symfony - 使用 Symfony 的 flashBag session 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12643714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com