Включение тестового режима в OmniAuth не перенаправляет запросы при использовании Cucumber - PullRequest
1 голос
/ 12 января 2012

Я пытаюсь проверить мой OmniAuth процесс входа в систему путем предоставления поддельного хэша аутентификации при запросе к /auth/facebook, как описано здесь и здесь .Проблема в том, что когда я включаю тестовый режим, запрос возвращается как ошибка, что аналогично тому, когда тестовый режим не включен.

user_management.feature

Feature: User management
    @omniauth_test
    Scenario: Login
        Given a user exists
        And that user is signed in

web_steps.rb

...
And /^that user is signed in$/ do
  visit "/auth/facebook"
end
...

omniauth.rb

Before('@omniauth_test') do
  OmniAuth.config.test_mode = true
  p "OmniAuth.config.test_mode is #{OmniAuth.config.test_mode}"
  # the symbol passed to mock_auth is the same as the name of the provider set up in the initializer
  OmniAuth.config.mock_auth[:facebook] = {
      "provider"=>"facebook",
      "uid"=>"uid",
      "user_info"=>{"email"=>"test@xxxx.com", "first_name"=>"Test", "last_name"=>"User", "name"=>"Test User"}
  }
end

After('@omniauth_test') do
  OmniAuth.config.test_mode = false
end

Результат

Feature: User management

  @omniauth_test
  Scenario: Login                # features/user_management.feature:3
"OmniAuth.config.test_mode is true"
    Given a user exists     # features/step_definitions/pickle_steps.rb:4
    And that user is signed in # features/step_definitions/web_steps.rb:40
      No route matches [GET] "/auth/facebook" (ActionController::RoutingError)
      ./features/step_definitions/web_steps.rb:41:in `/^that user is signed in$/'
      features/testing.feature:5:in `And that user is signed in'

Ответы [ 3 ]

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

Вы должны бросить эти два в инициализатор теста:

request.env["devise.mapping"] = Devise.mappings[:user] 
request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:facebook]
0 голосов
/ 29 мая 2012

Добавьте следующее в omniauth.rb в файле features / support и отметьте свой сценарий, для которого требуется вход через fb, с помощью @ omniauth_test

Before('@omniauth_test') do  
  OmniAuth.config.test_mode = true  

  # the symbol passed to mock_auth is the same as the name of the provider set up in the initializer
  OmniAuth.config.mock_auth[:facebook] = {
   :provider => 'facebook',
   :uid => '1234567',
   :info => {
     :nickname => 'test',
     :email => 'info@gmail.com',
     :name => 'Test User',
     :first_name => 'Test',
     :last_name => 'User',
     :location => 'California',
     :verified => true
    }.stringify_keys!
  }.stringify_keys!
end

After('@omniauth_test') do
  OmniAuth.config.test_mode = false
end
0 голосов
/ 19 января 2012

Проблема не в ваших тестах. Это с вашей маршрутизацией, или, более конкретно, с маршрутизацией omniauths.

Вы уверены, что у вас настроена стратегия в config / initializers / omniauth.rb для facebook?

Вы можете получить его в gemform https://github.com/mkdynamic/omniauth-facebook

Кроме того, не забудьте перезапустить ваш веб-сервер после добавления новой стратегии. (Это дало мне один раз;))

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