请求设计规格

时间:2012-07-21 02:39:47

标签: rspec devise capybara omniauth

我希望这应该很容易回答。我确实环顾四周,找不到答案,即使它可能是直截了当的。

运行我的规范和

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 ...

1 个答案:

答案 0 :(得分:0)

就我而言,user.rb上的devise配置行与auth提供程序名称不匹配。我试图=link_to "login using Twitter", user_omniauth_authorize_path(:twitter)user.rb上的配置阅读devise :omniauthable, :omniauth_providers => [:twiter](注意我错过了't')