Symfony2: невозможно симулировать HTTP-аутентификацию в функциональном тесте - PullRequest
4 голосов
/ 27 января 2012

Я пытаюсь использовать следующую технику, описанную на symfony.com: http://symfony.com/doc/current/cookbook/testing/http_authentication.html в попытке функционально проверить контроллер, который требует, чтобы пользователь вошел в систему.

Пока моя форма входа в систему работает, я могу войти, и веб-панель отладки Symfony2 показывает моего пользователя как аутентифицированного. Кроме того, я уже написал функциональный тест для самого процесса входа в систему, это проходит. Итак, я теперь по двум сценариям, что мой логин работает.

Единственная проблема, с которой я сталкиваюсь, это попытка симулировать HTTP-аутентификацию, как это делается для других контроллеров:

$client = static::createClient(array(), array(
    'PHP_AUTH_USER' => 'tester',
    'PHP_AUTH_PW'   => 'testpass',
));

Проверяя $ client, я могу видеть, что меня перенаправляют на страницу входа в систему, когда я пытаюсь что-то вроде этого:

$crawler = $client->request('GET', '/');

Я знаю, что в БД существует пользовательский тестер с паролем testpass, так как я могу также войти в систему с этой учетной записью через браузер.

Я могу использовать следующий код из теста контроллера безопасности:

    $client = $this->createClient(array(), array('HTTP_HOST' => 'myapp.test'));

    // Visit user login page and login
    $crawler = $client->request('GET', '/login');
    $form = $crawler->selectButton('Login')->form();
    $crawler = $client->submit($form, array('_username' => 'tester', '_password' => 'testpass'));

    // ... carry on with remainder of tests

но я не слишком уверен, что это самый эффективный способ сделать это.

Я немного ошеломлен тем, что не так. Есть идеи? Было ли применено изменение к Symfony2, которое означает, что этот процесс изменился, и симуляция аутентификации HTTP теперь не работает или работает по-другому?

Ответы [ 2 ]

5 голосов
/ 27 января 2012

Подумав об этом, я мог бы просто войти в систему, используя следующий метод setUp:

public function setUp()
{
    // Perform user login.
    $this->client = $this->createClient(array(), array('HTTP_HOST' => 'scire.test'));
    $crawler = $this->client->request('GET', '/login');
    $form = $crawler->selectButton('Login')->form();
    $this->client->submit($form, array('_username' => 'tester', '_password' => 'tester'));
}

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

Примечание для себя: HTTP-аутентификация отличается от использования провайдера пользователя Doctrine !!!

0 голосов
/ 27 января 2012

Отправьте ваш запрос так:

<?php
$client->request(
    'GET',
    '/',
    array(),
    array(),
    array('PHP_AUTH_USER' => 'username', 'PHP_AUTH_PW' => 'pa$$word')
);

На самом деле эта информация отправляется в виде реальной информации заголовка аутентификации.

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