我使用REST和OAuthBundle为我的Symfony应用程序创建了UnitTests。要测试防火墙后面的API,我使用setUp
方法创建了UsernamePasswordToken
$token = new UsernamePasswordToken($user, null, 'default', array('ROLE_USER'));
现在我通过
设置令牌self::$client->getContainer()->get('security.token_storage')->setToken($token);
有趣的是,此令牌仅适用于存储中的一个请求。第一个断言的第一个请求成功,第二个请求因401错误而失败。我之后检查了存储,getToken()
方法返回NULL
。如果我在下一个请求之前再次设置令牌,则此请求也会成功。
这是一个示例请求和断言:
$crawler = self::$client->request('GET', '/api/users');
$this->assertEquals(200, self::$client->getResponse()->getStatusCode());
所以,我可以在每个请求之前设置令牌来解决问题,但这在我的所有测试中都会非常烦人。为什么令牌之后是#34;使用"走了,我怎么能设定一个" life"或其他什么?
答案 0 :(得分:0)
我认为问题在于每个请求内核及其容器都会从缓存中再次加载,而不包含您的令牌。您必须在会话中保留令牌才能永久保留。文档Testing HTTP Authentication
中描述了如何执行此操作<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="tab" data-type="wx" data-desc="整合">
<span data-type="wx" class="on">整合</span>
<span data-type="sx">第一球</span>
<span data-type="qsm">第二球</span>
<span data-type="zsm">第三球</span>
<span data-type="hsm">第四球</span>
<span data-type="em">第五球</span>
</div>
这应该适用于多个请求,如果您仍希望某些测试不能登录,则可以按照test-method进行设置。