使用Symfony的flashBag会话进行单元测试
我正在使用单元测试在Silex中创建一个应用程序.
运行单元测试对常规会话处理程序工作正常: $app->register(new SilexProviderSessionServiceProvider(),array( 'session.storage.options' => array( 'cookie_lifetime' => 1209600,// 2 weeks ),)); 并在我的单元测试中设置此标志: $this->app['session.test'] = true; 如果我没有设置session.test标志,我的单元测试会抛出已发送的标头错误并且全部失败.有了它,我的测试运行良好. 问题是我试图使用flashBag功能(会话信息只持续到第一个请求然后被删除): $foo = $app['session']->getFlashBag()->all(); flashBag似乎不尊重session.test标志,并尝试发送标头,导致我的所有单元测试失败:
我把它缩小到这段代码: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)并且旧方法已被弃用. 让我的单元测试工作的任何建议都很棒. 解决方法
要进行测试,您需要使用MockArraySessionStorage实例替换session.storage服务:
use SymfonyComponentHttpFoundationSessionStorageMockArraySessionStorage; $app['session.storage'] = new MockArraySessionStorage(); 这是因为本机尝试通过标头发送cookie,这当然在测试环境中失败. 编辑:现在有一个session.test参数,你应该设置为true.这将自动使会话使用模拟存储. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |