Authentication 如何在Symfony2中对安全页面进行功能测试? 用于重现问题的设置和信息 Symfony2.2应用程序 LiipFunctionalTestBundle DoctrineFixturesBundle FOSUserBundle

Authentication 如何在Symfony2中对安全页面进行功能测试? 用于重现问题的设置和信息 Symfony2.2应用程序 LiipFunctionalTestBundle DoctrineFixturesBundle FOSUserBundle,authentication,testing,symfony,functional-testing,Authentication,Testing,Symfony,Functional Testing,对于测试环境,我使用LiipFunctionalTestBundle并(从DoctrineFixtures)生成一个伪SQLite数据库。它的配置正确-我已经能够成功地测试我的非安全页面 我在/secured/test下创建了一个简单的安全页面,其中包含以下视图: <h2 class="username">{{ app.user.username }}</h2> 结果是,断言false为true失败。 我试过了 我想用这个断言来测试这个动作: $client =

对于测试环境,我使用LiipFunctionalTestBundle并(从DoctrineFixtures)生成一个伪SQLite数据库。它的配置正确-我已经能够成功地测试我的非安全页面

我在
/secured/test
下创建了一个简单的安全页面,其中包含以下视图:

<h2 class="username">{{ app.user.username }}</h2>
结果是,
断言false为true失败。

  • 我试过了

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

    $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);
    
    $this->logIn();
    
    $crawler = $this->client->request('GET', '/secured/test');
    
    $count = $crawler
             ->filter('h2.username:contains("myUserName")')
             ->count();
    
    $this->assertTrue($count > 0);
    
    当然,我将登录函数更改为不同的用户名

    结果是,
    断言false为true失败。

    这些都不管用。怎么了?
    我尝试过许多其他方法,但问题的解决方法非常简单:

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

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

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

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

    您的应用程序使用http身份验证或带有登录表单和防火墙的symfony internal?您是否查看了爬虫返回的完整html?我尝试启用http身份验证(仅在测试环境中),但我无法让它工作Crawler返回重定向到登录页面,因为您没有http身份验证,但有登录表单和项目内部身份验证整个第一部分(PHP_AUTH_USER,…)始终无法工作。