2015-10-15 122 views
2

我有一個功能規格,從外部網站接收令牌並重定向回我的應用程序。重定向後,客戶端將獲得orders#new視圖,該視圖調用@current_user.items。此調用適用於除測試以外的所有環境。水豚/鬼驅人或硒得到undefined method items for nil class水豚/ Poltergeist /設計@current_user是無 - Rails 4

我已經試過:

  • before(:each)
  • 分配@current_user改變網絡驅動器
  • Rails.env.test?設置@current_userUser.first我 控制器

我該如何製作當然@current_user在測試?

回答

1

您需要登錄您的功能規格,或通過設計使用wardens測試模式僞造登錄 - 請參閱https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara - 以便設置當前用戶(以及相關的會話cookie)。當使用除機架測試以外的任何Capybara驅動程序時,功能測試和應用程序各自單獨運行,因此試圖在before(:each)中設置@current_user不起作用。在控制器中設置它可能適用於該控制器操作,但如果您正在關聯鏈接等,則不會設置會話cookie,並且在控制器中執行類似於測試的操作通常是一個糟糕的主意。

0

湯姆的回答讓我意識到cookie不會被存儲,因爲水豚主機不是靜態的。最後我明確地設置,server_hostapp_host在工作就像一個魅力的rails_helper

Capybara.app_host = 'http://localhost:3000' 
Capybara.server_host = 'localhost' 
Capybara.server_port = '3000' 

我的應用程序沒有使用設計和監獄長。否則,湯姆的答案會奏效。

+0

如果你的應用程序不使用設計,你應該從問題 –

+0

@TomWalpole中刪除設計標籤感謝您指出這一點!編輯。 –

相關問題