功能测试失败

时间:2015-12-01 09:37:08

标签: php symfony phpunit functional-testing

我正在尝试对防火墙后面的路由进行功能测试。我不确定我做错了什么,但路线admin/dashboard的测试失败了。有什么想法吗?

<?php

namespace AppBundle\Tests;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\BrowserKit\Cookie;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;

class ApplicationAvailabilityFunctionalTest extends WebTestCase
{

    private $client;

    public function setUp()
    {
        $this->client = self::createClient();
    }

    /**
     * @dataProvider urlProvider
     */
    public function testPageIsSuccessful($url)
    {

        $this->client->request('GET', $url);

        $this->assertTrue($this->client->getResponse()->isSuccessful());
    }

    public function urlProvider()
    {
        $this->logIn();

        return array(
            array('/'),
            array('/admin/login'),
            array('/admin/dashboard'),
        );
    }

    public function logIn()
    {

        $this->client = self::createClient();
        $session = $this->client->getContainer()->get('session');

        $firewall = 'our_db_provider';
        $token = new UsernamePasswordToken('admin', 'admin', $firewall, array('ROLE_ADMIN'));
        $session->set('_security_'.$firewall, serialize($token));
        $session->save();

        $cookie = new Cookie($session->getName(), $session->getId());
        $this->client->getCookieJar()->set($cookie);
    }
}

// UPDATE

这是我得到的错误

1) AppBundle\Tests\ApplicationAvailabilityFunctionalTest::testPageIsSuccessful with data set #2 ('/admin/dashboard')
Failed asserting that false is true.

/Users/me/Projects/cms/src/AppBundle/Tests/ApplicationAvailabilityFunctionalTest.php:27

//更新2

这里是$ token变量

的转储

Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken {#488 -credentials: null -providerKey: "security" -user: "admin" -roles: array:1 [ 0 => Symfony\Component\Security\Core\Role\Role {#487 -role: "ROLE_ADMIN" } ] -authenticated: true -attributes: [] }

//更新3

`security:
    encoders:
        AppBundle\Entity\Admin\User:
            algorithm: bcrypt
    providers:
        our_db_provider:
            entity:
               class: AppBundle\Entity\Admin\User
               property: username
    access_control:
        - { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, roles: ROLE_ADMIN }
    firewalls:
        default:
            anonymous: ~
            http_basic: ~
            form_login:
               login_path: /admin/login
               check_path: /admin/login_check
               csrf_provider: security.csrf.token_manager
            logout:
               path:   /admin/logout
               target: /admin/login
            provider: our_db_provider
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        main:
            anonymous: ~`

1 个答案:

答案 0 :(得分:0)

路线不公开

失败的测试位于可能受身份验证保护的/admin/dashboard路由上,因此服务器响应未成功(200 OK)但(403拒绝访问或302重定向)

因此,您必须以不同方式测试您的路线:路线受到保护,因此请检查403或重定向到登录页面

查看有关How to Simulate Authentication with a Token in a Functional Test

的文档

并测试经过身份验证的用户是否正确查看了该页面