Rails.env在测试中返回'development',导致设计真实性令牌以破坏测试?

时间:2012-08-23 20:05:33

标签: ruby-on-rails forms authentication testing devise

我开始在测试套件中始终收到以下错误:

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 }}

1 个答案:

答案 0 :(得分:1)

错误是由于我的测试在开发中运行。当我让它在测试环境中运行时,错误就消失了。

它没有在测试环境中运行的原因是因为我一直在升级,我使用RAILS_ENVRails.env进行了“全部替换”并且ENV["Rails.env"]列在我的测试帮助器中。我认为rails只是忽略了这一点并且默认为开发环境