Я пытаюсь использовать следующий метод, описанный на 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 теперь не работает или работает по-другому?
Размышляя об этом, я могу просто сделать логин, используя следующий метод 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 !!!
Отправьте свой запрос следующим образом:
<?php $client->request( 'GET', '/', array(), array(), array('PHP_AUTH_USER' => 'username', 'PHP_AUTH_PW' => 'pa$$word') );
Это фактически отправляет информацию как реальную информацию заголовка проверки подлинности.