2015-10-15 76 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中删除设计标签感谢您指出这一点!编辑。 –

相关问题