Обработка аутентификации в модульных тестах Symfony2 - PullRequest
2 голосов
/ 15 декабря 2011

Я хочу написать функциональные тесты для контроллеров, которые защищены с помощью механизмов аутентификации Symfony2. Я прочитал много руководств, описывающих это, но, к сожалению, все они не работают для меня с текущей версией Symfony2 (протестировано с 2.0.4 до 2.0.7)

Что я сделал до сих пор:

Добавление настроек безопасности в config_test.yml

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext

    providers:
        main:
            users:
                admin:  { password: adminsmurf, roles: [ 'ROLE_USER' ] }
                inventory: { password: inventorysmurf, roles: [ 'ROLE_ADMIN', 'ROLE_USER', 'ROLE_INVENTORY' ] }
                andon: { password: andonsmurf, roles: [ 'ROLE_ADMIN', 'ROLE_ANDON' ] }

    firewalls:
        main:
            pattern:    /.*
            http_basic:
                realm: "Secured Area"
                provider: main
            logout:     true
            security:   true
            stateless:  true
            anonymous: true

Блок-Test

class DefaultControllerTest extends WebTestCase
{

    public function testCorrectAuthentificationCredentials()
    {
        $client = static::createClient();

        $crawler = $client->request('GET', '/inventory/index', array(), array(), 
                                    array(
                                          'PHP_AUTH_USER' => 'admin',
                                          'PHP_AUTH_PW' => 'adminsmurf'
                                        ));

        $response = $client->getResponse();

        $this->assertEquals(200, $response->getStatusCode());
    }
}

Этот тест не пройден (ожидается 200, получите 302). Кто-нибудь может помочь, что я делаю неправильно?

Обновление 16/12

Я сделал еще один шаг. Поскольку я использую форму входа в свой обычный файл безопасности. Symfony только что добавил логин http_basic в брандмауэр. Это было причиной перенаправления (302). Я только что добавил

form_login: false

к тестовым настройкам безопасности. Сейчас перенаправление отсутствует, но в результате я получаю код состояния 401.

Ответы [ 2 ]

3 голосов
/ 16 декабря 2011

Я показываю, что базовая аутентификация HTTP должна идти в качестве 4-го аргумента запроса, а не 5-го. Источник - документы - если они не работают, мы должны обновить их. Но дай мне знать:

http://symfony.com/doc/2.0/cookbook/testing/http_authentication.html

Кроме того, если у вас все работает правильно, вы можете снова включить авторизацию формы, поскольку у Symfony не будет никаких причин использовать точку входа в форму (

Надеюсь, это поможет!

1 голос
/ 13 сентября 2013

В моем случае проблема заключалась в том, что тестовая среда использует отдельную базу данных, но я забыл заполнить ее пользователями.m)

Я знаю, это, вероятно, не совсем решение вашей проблемы, но давайте посмотрим, сколько получит положительных голосов, если все с одинаковыми проблемами проголосуют.Если никто не делает, ну, я единственный, кто такой глупый.

Кстати, вы можете попробовать провайдера в памяти, чтобы увидеть, не проходит ли ваша аутентификация из-за проблем с базой данных или тому подобное.Вот как я узнал, в чем заключалась моя проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...