Railscast on Devise と OmniAuth に従って、OmniauthCallbacksController < Devise::OmniauthCallbacksController
OmniAuth コールバックを処理する単一のメソッドを含むを実装しました。
def all
user = User.from_omniauth(request.env["omniauth.auth"])
if user.persisted?
sign_in_and_redirect user
else
session["devise.user_attributes"] = user.attributes
redirect_to new_user_registration_url
end
end
alias_method :facebook, :all
ルート.rb:
devise_for :users, controllers: {omniauth_callbacks: "omniauth_callbacks", :sessions => "sessions" }
これをカスタマイズしたいので、RSpecを使ってテストしようとしています。問題は、このメソッドとリダイレクトをどのようにテストするかです。
仕様に記載されている場合user_omniauth_callback_path(:facebook)
、ルートが存在しないことについて不平を言うことはありませんが、実際にメソッドを呼び出しているようには見えません。
この回答によると、 「コントローラーのテストでは、コントローラーが RESTful であるかどうかに関係なく、4 つの HTTP 動詞 (GET、POST、PUT、DELETE) を使用します。」などを試しget user_...
ましたが、ここではルートが存在しないと文句を言います。実際、私が行うrake routes
と、このルートに HTTP 動詞がないことが示されます。
user_omniauth_callback [BLANK] /users/auth/:action/callback(.:format) omniauth_callbacks#(?-mix:facebook)
私が欠けているものを見ることができますか?
編集
したがって、この質問に続いて、メソッドを呼び出す1つの方法は次のとおりです。
controller.send(:all)
ただし、質問者が遭遇したのと同じエラーが発生します。
ActionController::RackDelegation#content_type delegated to @_response.content_type, but @_response is nil