2

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 で実行すると、このコードがすべて完全に機能することです。テストで失敗するだけです。

洞察に感謝します!

4

1 に答える 1