Rails 3.2.11の下でDevise 2.2.0とomniauth 1.1.1を使用しています。
「homepageController」と呼ばれる認証されていない(たとえば「before_filter:authenticate_user!」がない)コントローラーで、「homepage」と呼ばれるアクションでテストを行っています。このコントローラー アクションは、ユーザーがサインインしていない限りそのビューを通過するという点で非常に単純です。ユーザーがサインインしている場合は、「ホームベース」ページにリダイレクトされます。コントローラーのアクションは次のとおりです。
class HomepageController < ApplicationController
def homepage
if current_user then
redirect_to :homebase
end
end
end
これが私のテストです:
require 'test_helper'
class HomepageControllerTest < ActionController::TestCase
def setup
@user = users(:donley)
end
test "should get homepage when signed in" do
sign_in @user
get :homepage
assert_redirected_to "/homebase"
end
test "should get homepage when not signed in" do
get :homepage
assert_response :success
end
end
2 番目のテストは次のエラーで失敗します。
No route matches {:controller=>"omniauth_callbacks", :action=>"passthru", :provider=>:facebook}
ビューのこの行で:
= link_to user_omniauth_authorize_path(:facebook) do
ここに私のデバイスとオムニ認証ルートがあります:
resources :oauth_clients
match '/oauth/test_request', :to => 'oauth#test_request', :as => :test_request
match '/oauth/token', :to => 'oauth#token', :as => :token
match '/oauth/access_token', :to => 'oauth#access_token', :as => :access_token
match '/oauth/request_token', :to => 'oauth#request_token', :as => :request_token
match '/oauth/authorize', :to => 'oauth#authorize', :as => :authorize
match '/oauth', :to => 'oauth#index', :as => :oauth
devise_for :users, :controllers => {:omniauth_callbacks => "omniauth_callbacks"}
devise_scope :user do
get "sign_in", :to => "devise/sessions#new"
get "sign_up", :to => "devise/registrations#new"
match "sign_out", :to => "devise/sessions#destroy"
end
以下はrake routes
、エラー メッセージに記載されているようなルートからのルートです。
user_omniauth_authorize /users/auth/:provider(.:format) omniauth_callbacks#passthru {:provider=>/facebook|linkedin/}
本当にクレイジーなことはrails server
、私の本番環境で Heroku 内または Heroku で実行すると、このコードがすべて完全に機能することです。テストで失敗するだけです。
洞察に感謝します!