2011-12-15 2 views
2

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

То, что я сделал до сих пор:

Добавление параметры безопасности в 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 

Unit-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). Может ли кто-нибудь помочь, что я делаю неправильно?

Update 16/12

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

form_login: false 

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

+0

302 является переадресацией. Не могли бы вы проверить, куда вы перенаправлены? –

+0

@kuba - это перенаправление на форму входа в систему (вход в систему - это обычный способ аутентификации в моем приложении). – Timo

+0

Я решил проблему с перенаправлением, но теперь у меня есть код состояния 401 – Timo

ответ

3

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

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

Кроме того, после того как вы это работает правильно, вы можете превратить форму AUTH обратно, так как Symfony не будет иметь никаких оснований использовать точку входа формы (< - фантазии слово :)), чтобы перенаправить вас.

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

1

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

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

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