我今天在这,因为我正在为我的symfony2应用程序进行功能测试,我有一点问题: 我可以登录TestUser进行测试(在客户端创建期间传递服务器参数),但是当我只想访问我的用户对象(通过我的测试,在控制器中)时,他是空的。
这是合乎逻辑的,因为我没有创建通过登录页面的对象,但我没有找到这个问题的问题,你能帮助我吗?
(我知道我可以做一个" init功能"女巫打电话给登录页面,提交登录表格等...但我发现它很脏,因为我必须在每次测试之前给她打电话,所以...不)
感谢' s;
答案 0 :(得分:1)
我找到了答案HERE
类似的功能:
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)
使用在客户端请求中设置服务器变量的函数:
$client->request(
'METHOD',
'URI',
PARAMETERS,
array(),
array('PHP_AUTH_USER' => 'username', 'PHP_AUTH_PW' => 'pa$$word')
);
玩得开心:)
答案 1 :(得分:0)
如果你想使用真实的用户对象,你应该使用像DoctrineTestFixtures这样的TestFixtures。
Fixtures在单独的测试数据库中提供测试数据,我认为它们应该用于每个功能测试
http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html