Ruby on rails 3 Desive/Omniauth测试失败:没有路由匹配{:controller=>;“Omniauth”回调、:action=>;“passthru”、:provider=>;:facebook}

Ruby on rails 3 Desive/Omniauth测试失败:没有路由匹配{:controller=>;“Omniauth”回调、:action=>;“passthru”、:provider=>;:facebook},ruby-on-rails-3,devise,routes,omniauth,testunit,Ruby On Rails 3,Devise,Routes,Omniauth,Testunit,我正在rails 3.2.11下使用Desive 2.2.0和omniauth 1.1.1 我在一个名为“HomepageController”的未经身份验证(例如,no“before\u filter:authenticate\u user!”)控制器上进行了测试,该控制器的操作名为“HomepageController”。此控制器操作非常简单,除非用户登录,否则它将传递到其视图,在这种情况下,它将重定向到我们的“homebase”页面。以下是控制器操作: class HomepageCont

我正在rails 3.2.11下使用Desive 2.2.0和omniauth 1.1.1

我在一个名为“HomepageController”的未经身份验证(例如,no“before\u filter:authenticate\u user!”)控制器上进行了测试,该控制器的操作名为“HomepageController”。此控制器操作非常简单,除非用户登录,否则它将传递到其视图,在这种情况下,它将重定向到我们的“homebase”页面。以下是控制器操作:

class HomepageController < ApplicationController
  def homepage
if current_user then
  redirect_to :homebase
end
  end
end
在视图中的此行上:

= link_to user_omniauth_authorize_path(:facebook) do
以下是我的Desive和omniauth路线:

  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服务器
或我的生产环境中的Heroku上运行时都能完美工作。它只是在测试中失败了


非常感谢您的任何见解

我今天遇到了同样的问题,发现我没有在测试环境中添加Facebook作为提供商。这应该在
designe.rb
初始化器中完成。我想这就是为什么我运行测试时没有生成路由的原因

#config/initializers/devise.rb
if Rails.env.test?
  config.omniauth :facebook, "APP_ID", "APP_SECRET"
end

这不是你问题的答案,但是。。。你的主页逻辑不应该使用这样的重定向。您应该使用Desive的助手
authenticated
,例如:Ashitaka,这可能无法回答此问题,但可能会解决我的问题。谢谢你解决过这个问题吗?我奇怪地遇到了完全相同的问题(
rails s
工作得很好),我已经在使用一个
authenticated:user
块,因此该链接对我没有帮助。很抱歉,但是,没有。我最终删除了测试用例。代码太琐碎了,我无法证明花在修复测试上的时间是合理的。
user_omniauth_authorize /users/auth/:provider(.:format) omniauth_callbacks#passthru {:provider=>/facebook|linkedin/}
#config/initializers/devise.rb
if Rails.env.test?
  config.omniauth :facebook, "APP_ID", "APP_SECRET"
end