我正在尝试测试一些特定于环境的设置(中间件是特定的,但这似乎并不重要),但我无法让测试在正确的环境中运行。症状:
- 如果我运行
ruby test/unit/my_test.rb
,一切都很好,因为它所做的第一件事就是 requiretest/test_helper.rb
,它将环境设置为"test"
然后加载 Rails 环境。 - 如果我运行
rake test
,第一批(功能)运行良好,但第二批(单位)失败。失败是ENV['RAILS_ENV]
在批次之间以某种方式未设置,然后config/environment.rb
看到没有设置并使用默认的"development"
. 环境config/environment.rb
在该文件中配置块的开头和开头是正确的,但到最后是错误的。我可以通过使用 aputs
或删除config/development.rb
导致它找不到文件来判断。 - 如果我运行
rake test:units
,我会遇到与第二批相同的问题rake test
(即全部失败) - 如果我跑步
rake test:functionals
,我会得到与 for 相同的结果rake test:units
- 如果我运行
rake test RAILS_ENV=test
orrake test:units RAILS_ENV=test
orrake test:functionals RAILS_ENV=test
,一切都很好!
我尝试过的一件事根本不起作用:
# in Rakefile:
task :set_test_env { ENV['RAILS_ENV'] = 'test' }
Rake::Task[:test].prerequisites.unshift :set_test_env
# and similarly for other test tasks
:set_test_env
我什至尝试为每个测试任务创建一个单独的这些任务,以便我确信它会在每个测试任务之前被调用,而不是只调用一次。还是没有骰子。它确实被调用了,并且环境在开始时是正确的,config/environment.rb
但内部出现了问题。
我没有电话可以ENV['RAILS_ENV']
在任何地方设置我的代码。