我希望这应该很容易回答。我确实环顾四周,找不到答案,即使它可能是直截了当的。
当运行我的规范和
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)
这是我在规范/支持中定义的助手......所以一切都应该正常工作,我想。
如果我,相反
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
令人沮丧...我不明白为什么当我不测试它时它甚至尝试链接到 facebookomniauth...