我希望这应该很容易回答。我确实环顾四周,找不到答案,即使它可能是直截了当的。
运行我的规范和
时visit correspondences_path
我得到了
Failure/Error: visit '/correspondences'
ActionView::Template::Error:
No route matches {:controller=>"users/omniauth_callbacks", :action=>"passthru", :provider=>:facebook}
# ./app/views/layouts/_navigation.html.erb:12:in `_app_views_layouts__navigation_html_erb___642964846_100119950'
显然我的导航栏上有omniauth按钮,虽然浏览器中的一切正常。只有用户通过Devise进行身份验证时才能查看该页面:
user = FactoryGirl.create(:user_with_correspondences, correspondences_count: 1)
然后我,
sign_in_as_a_valid_user(user)
这是我在spec / support中定义的帮助器...所以一切都应该正常工作,我想。
如果我,而不是
get correspondences_path
我得到的只是一个doctype声明(当打印page.html时)在页面上,任何其他断言即使它们不应该通过。
我模糊不清,因为我确信我在这里做了一些愚蠢的事情,而且有人会快速指出我,而不必发布我的所有代码并不是很有趣。 我提前感谢。
路线很简单:
authenticated :user do
root :to => 'correspondences#index'
end
root :to => 'home#index'
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
resources :users, :only => [:show, :index]
resources :correspondences
resources :recipients
支持/ request_macros.rb
module ValidUserRequestHelper
def sign_in_as_a_valid_user(user)
post_via_redirect user_session_path, 'user[email]' => user.email, 'user[password]' => user.password
end
和spec_helper.rb
...
config.include ValidUserRequestHelper, :type => :request
...
end
所以在规范中:
...
it "shold display a users corresponces" do
user = FactoryGirl.create(:user_with_correspondences, correspondences_count: 1)
sign_in_as_a_valid_user(user)
visit correspondences_path
page.all('.correspondences').count == 3 #never gets here
end
令人沮丧......我无法理解为什么当我没有测试时,它甚至会尝试链接到facebook omniauth ...
答案 0 :(得分:0)
就我而言,user.rb上的devise配置行与auth提供程序名称不匹配。我试图=link_to "login using Twitter", user_omniauth_authorize_path(:twitter)
和user.rb
上的配置阅读devise :omniauthable, :omniauth_providers => [:twiter]
(注意我错过了't')