[Symfony2] [PhpUnit]如何为functionnals测试获取/设置用户对象

时间:2014-07-03 12:59:31

标签: php symfony testing phpunit

我今天在这,因为我正在为我的symfony2应用程序进行功能测试,我有一点问题: 我可以登录TestUser进行测试(在客户端创建期间传递服务器参数),但是当我只想访问我的用户对象(通过我的测试,在控制器中)时,他是空的。

这是合乎逻辑的,因为我没有创建通过登录页面的对象,但我没有找到这个问题的问题,你能帮助我吗?

(我知道我可以做一个" init功能"女巫打电话给登录页面,提交登录表格等...但我发现它很脏,因为我必须在每次测试之前给她打电话,所以...不)

感谢' s;

2 个答案:

答案 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