我开始在测试套件中始终收到以下错误:
NoMethodError: undefined method 'user' for nil:NilClass
这似乎是我在测试套件中发布的帖子请求。靠近堆栈顶部的跟踪如下:
devise-2.1.2/lib/devise/controllers/helpers.rb:259:in 'handle_unverified_request'
actionpack-3.2.8/lib/action_controller/metal/request_forgery_protection.rb:78:in 'verify_authenticity_token'
这是有道理的,因为我在邮寄请求中传递的只是一封电子邮件,而不是真实性令牌。但是,我觉得他们应该以某种方式设计。我包括Devise::TestHelpers
,我不需要调用sign_in来执行此请求。
经过进一步检查,我发现如果我raise Rails.env.inspect
,我会接受“发展”。这就是设计期望有真实性令牌的原因吗?如何强制它在测试环境中运行(我猜测并试过$ rake test:functionals -e test
无效)?
造成这种情况的一行是
post :forgot_password, {:user => { :email => users(:quentin).email }}
答案 0 :(得分:1)
错误是由于我的测试在开发中运行。当我让它在测试环境中运行时,错误就消失了。
它没有在测试环境中运行的原因是因为我一直在升级,我使用RAILS_ENV
对Rails.env
进行了“全部替换”并且ENV["Rails.env"]
列在我的测试帮助器中。我认为rails只是忽略了这一点并且默认为开发环境