2015-12-01 5 views
2

Я пытаюсь выполнить функциональный тест для маршрутов, расположенных за брандмауэром. Я не уверен, что я делаю неправильно, но тест на маршрут 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 

// UPDATE 2

Вот дамп $ лексема переменной

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: [] }

// UPDATE 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: ~` 
+0

какая ошибка у вас? –

+0

По-видимому, такого маршрута нет. Разве 'app/console debug: router' показывает что-либо, связанное с '/ admin/dashboard'? –

+0

Маршрут существует. Он загружается отлично в браузере. Вот вывод отладки: router 'app_admin_dashboard ЛЮБОЙ ЛЮБОЙ ЛЮБОЙ/admin/dashboard' – Vodokan

ответ

0

Маршрут не является публичной

Тест неудачи находится на /admin/dashboard маршруте, который, вероятно, является защищенной аутентификацией, так что ответ сервера не успешно (200 OK), но (403 отказано в доступе или 302 редирект)

таким образом, вы должны проверить свой маршрут по-разному: маршрут защищен так проверка на 403 или что перенаправление на страницу входа

Проверьте документ о How to Simulate Authentication with a Token in a Functional Test

И проверьте, что аутентифицированный пользователь правильно видит страницу

+0

Да, маршрут защищен брандмауэром. Вот почему я использую метод logIn(). Наверное, я там что-то пропустил ... – Vodokan

+0

Привет @Vodokan вам нужно сделать логин, проверьте [doc здесь] (http://symfony.com/doc/current/cookbook/testing/simulating_authentication.html) для дальнейшего подробно о том, как реализовать аутентификацию в функциональном тесте – Matteo

+0

Пожалуйста, снова просмотрите код, который я разместил. Я сделал все, что описано на странице, на которую вы ссылаетесь. – Vodokan