【问题标题】:Rails.env returns 'development' in testing causing devise authenticity tokens to break tests?Rails.env 在测试中返回“开发”导致设计真实性令牌破坏测试?
【发布时间】:2012-08-23 20:05:33
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 对于遇到此错误的任何其他人,我发现我的数据库已被我的测试装置覆盖。如果您在服务器中运行测试并且应用认为它在生产中,这可能是一个问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多