【发布时间】:2016-03-29 02:14:48
【问题描述】:
我有一个简单的新 Rails 4 应用程序,当我运行 rake test:units 时它会破坏开发数据库,即使我已经在 test_helper.rb 中设置了 RAILS_ENV。我没想到会这样。以下是重现它的简单步骤。
我有 Ruby 2.0.0p247 和 Rails 4.0.1。
rails new foo
rails generate scaffold gadget
rake db:migrate
我将 test/models/gadget_test.rb 编辑为如下所示:
require 'test_helper'
class GadgetTest < ActiveSupport::TestCase
test "the env" do
assert_equal "test", Rails.env
end
end
我已经从
编辑了 test/test_helper.rb 的第一行ENV["RAILS_ENV"] ||= "test"
成为
ENV["RAILS_ENV"] = "test"
即便如此,当测试调用 rake test:units 时它还是失败了:
1) Failure:
GadgetTest#test_the_env test/models/gadget_test.rb:5]:
Expected: "test"
Actual: "development"
对于我设置的较旧的 (Rails 3) 应用程序,我可以依靠这种默认设置为测试环境。我错过了什么?
【问题讨论】:
-
当我遇到此问题时,将
ENV["RAILS_ENV"] ||= "test"更改为ENV["RAILS_ENV"] = "test"已修复。你确定你的 test_helper 正在被rake test:units加载吗? -
我认为
ENV["RAILS_ENV"] = "test"被调用太晚了,Rails 可能已经缓存了 Rails.env 的值? -
RAILS_ENV=test rake test:units是否按预期工作? -
@j_mcnally,我确信正在调用 test_helper。为了确认,我将
raise "testhelper"放在该文件的开头。它在任何测试运行之前引发了错误。此外,运行以RAILS_ENV=test为前缀的命令绝对可以正常运行。 -
请参阅
http://apidock.com/rails/Rails/env/class如果在设置 ENV["RAILS_ENV"] 之前调用 env ,它似乎会将值缓存为 @_env 它可能会以可变方式将开发缓存为值。
标签: ruby-on-rails ruby-on-rails-4