2012-07-21 66 views
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按鈕,但一切都在瀏覽器中正常工作。該網頁是唯一可見的,如果用戶是通過設計驗證:

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 

令人沮喪...我不明白爲什麼它甚至嘗試鏈接到Facebook的omniauth,當我沒有測試...

+0

你能粘貼你的'routes.rb'嗎?也許你需要像'correspondences_path(user)'或其他東西一樣傳遞一些東西到你的'correspondences_path'中。 – 2012-07-21 02:59:56

+0

發佈了它,然後一些 – 2012-07-21 05:36:39

+2

所以,我終於弄明白了..pretty dumb:在devise.rb中,對於facebook,我指定了我的Facebook SECRET鍵用於生產和開發,沒有任何東西用於測試....哇,哇,哇 – 2012-07-22 06:27:20

回答

0

在我的情況下,對user.rb devise配置行didn' t匹配auth提供者名稱。我試圖=link_to "login using Twitter", user_omniauth_authorize_path(:twitter)user.rb上的配置爲devise :omniauthable, :omniauth_providers => [:twiter](注意我缺少't')