如何在Symfony2中对安全页面进行功能测试?

时间:2013-05-24 15:05:35

标签: authentication testing symfony functional-testing

重现问题的设置和信息

  • Symfony2.2 application
  • LiipFunctionalTestBundle
  • DoctrineFixturesBundle
  • FOSUserBundle

为了测试环境,我使用LiipFunctionalTestBundle并生成(来自DoctrineFixtures)伪造的SQLite数据库。它配置正确 - 我已经能够成功测试我的非安全页面。

我使用此视图在/secured/test下创建了一个简单的受保护页面:

<h2 class="username">{{ app.user.username }}</h2>
  1. 我尝试过

  2. 我想用这个断言来测试这个动作:

    $client = static::createClient(array(), array(
        'PHP_AUTH_USER' => 'myUserName'
        'PHP_AUTH_PW'   => 'password',
    ));
    
    $crawler = $client->request('GET', '/secured/test');
    
    $count = $crawler
             ->filter('h2.username:contains("myUserName")')
             ->count();
    
    $this->assertTrue($count > 0);
    

    结果是Failed asserting that false is true.

    1. 我尝试过

    2. 我想用这个断言来测试这个动作:

      $this->logIn();
      
      $crawler = $this->client->request('GET', '/secured/test');
      
      $count = $crawler
               ->filter('h2.username:contains("myUserName")')
               ->count();
      
      $this->assertTrue($count > 0);
      

      当然我将logIn功能更改为不同的用户名。

      结果是Failed asserting that false is true.

      这些都不起作用。怎么了?

      我尝试了很多其他方法,但是

1 个答案:

答案 0 :(得分:2)

问题的解决方案非常简单:

在我的DoctrineFixtures中,我创建了新用户..但他们的帐户未启用。

将此代码添加到fixture中解决了问题:

    $user->setEnabled(true);
    $user->setExpired(false);
    $user->setLocked(false);

(因为我的测试试图登录未启用的帐户,“提交登录表单”的响应被重定向到登录页面)