Symfony2: невозможно смоделировать HTTP-аутентификацию в функциональном тесте

Я пытаюсь использовать следующий метод, описанный на 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') ); 

Это фактически отправляет информацию как реальную информацию заголовка проверки подлинности.