Devise + Omniauth - тестирование - отсутствие совпадений маршрутов "/ oauth / authorize" - PullRequest
5 голосов
/ 16 августа 2011

Я пытаюсь написать тесты для аутентификации через Twitter и Facebook. Я использую Devise и Omniauth. Когда я его пробую, он работает правильно, но я не могу пройти тесты на это.

Я следую инструкциям , но этого недостаточно для меня, плюс я делаю вещи немного по-другому (уже есть некоторая кодовая база). У меня есть пользовательские контроллеры для omniauth_callbacks и регистрации.

Моя проблема в том, что когда я запускаю тесты, он говорит:

(::) failed steps (::)

No route matches "/oauth/authorize" (ActionController::RoutingError)
<internal:prelude>:10:in `synchronize'
(eval):2:in `click_link'
./features/step_definitions/web_steps.rb:57:in `/^(?:|I )follow "([^"]*)"$/'
features/link_twitter.feature:19:in `And I link twitter'

Failing Scenarios:
cucumber features/link_twitter.feature:16 # Scenario: User links twitter

Откуда исходит этот /oauth/authorize маршрут и как с этим справиться?

Не похоже, что он доходит до моего OmniauthCallbacksController. Переходит по ссылке и затем умирает. Я думаю, что это связано с методом обратного вызова Omniauth в тестовом режиме, но я не уверен, как это изменить / управлять.

Обновление : Вот мои маршруты для Devise.

devise_for :users, :controllers => { 
    :omniauth_callbacks => "users/omniauth_callbacks", 
    :registrations => 'registrations', 
    :passwords => 'passwords', 
    :sessions => 'sessions', 
    :confirmations => 'confirmations' 
} do
  match 'confirmations/unconfirmed' => 'confirmations#unconfirmed', :as => :unconfirmed
  match 'confirmations/send_advisor_confirmation/:id' => 'confirmations#unregistered_advisor_confirmation', :as => :send_advisor_confirmation
  get '/users/auth/:provider' => 'users/omniauth_callbacks#passthru'
end

1 Ответ

15 голосов
/ 17 августа 2011

Я забыл поместить следующее в env.rb

# features/support/env.rb
OmniAuth.config.test_mode = true

Подробнее о тестировании читайте здесь .

...