これはかなり簡単に答えられるはずです、私は願っています。簡単なことかもしれませんが、周りを見回しても答えが見つかりませんでした。
私のスペックを実行すると
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宣言(print 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
support / 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へのリンクを試しているのか理解できません...