[英][Symfony2][PhpUnit] How get/set user object for functionnals tests
我今天在这里是因为我正在为symfony2应用程序进行功能测试,但我有一个小问题:我可以登录TestUser进行测试(在客户端创建过程中传递服务器参数),但是当我只想访问时到我的用户对象(根据我在控制器中的测试),他为空。
这是合乎逻辑的,因为我没有创建登录页面传递的对象,但没有找到该问题的原因,您能帮我吗?
(我知道我可以做一个“初始化函数”来调用登录页面,提交登录表单等...但是我发现它很脏,因为我必须在每次测试前都给她打电话,所以...不)
谢谢 ;)
我在这里找到答案
像这样的功能:
private function logIn()
{
$session = $this->client->getContainer()->get('session');
$firewall = 'FIREWALL_NAME'; //set in security_test.yml
$token = new UsernamePasswordToken('PASSWORD', null, $firewall, array('ROLE_ADMIN'));
$session->set('_security_'.$firewall, serialize($token));
$session->save();
$cookie = new Cookie($session->getName(), $session->getId());
$this->client->getCookieJar()->set($cookie);
}
将完成工作(创建会话的Cookie)
使用函数witch在客户端Request中设置服务器变量:
$client->request(
'METHOD',
'URI',
PARAMETERS,
array(),
array('PHP_AUTH_USER' => 'username', 'PHP_AUTH_PW' => 'pa$$word')
);
玩得开心 :)
如果要使用真实的用户对象,则应使用DoctrineTestFixtures之类的TestFixtures。
夹具在单独的测试数据库中提供测试数据,我认为它们应在每个功能测试中使用
http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.