在设计和 OmniAuth 上的Railscast 之后,我实现了一个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)
说它不会抱怨路由不存在,但似乎并没有真正调用该方法。
根据这个答案“控制器测试使用四个 HTTP 动词(GET、POST、PUT、DELETE),无论您的控制器是否是 RESTful。” 我试过get user_...
等,但在这里它确实抱怨路线不存在。事实上,如果我这样做rake routes
表明这条路线没有 HTTP 动词:
user_omniauth_callback [BLANK] /users/auth/:action/callback(.:format) omniauth_callbacks#(?-mix:facebook)
你能看到我错过了什么吗?
编辑
因此,按照这个问题调用该方法的一种方法是:
controller.send(:all)
但是,我遇到了提问者遇到的相同错误:
ActionController::RackDelegation#content_type delegated to @_response.content_type, but @_response is nil