2

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

当运行我的规范和

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

4

1 回答 1

0

就我而言, user.rb 上的设计配置行与身份验证提供程序名称不匹配。我正在尝试读取=link_to "login using Twitter", user_omniauth_authorize_path(:twitter)配置(请注意我缺少一个“t”)user.rbdevise :omniauthable, :omniauth_providers => [:twiter]

于 2014-01-30T18:58:49.723 回答