我正在尝试测试一些特定于环境的设置(特定于中间件,但这似乎无关紧要),但我无法让测试在正确的环境中运行。症状:
ruby test/unit/my_test.rb,一切都很好,因为它做的第一件事是需要 test/test_helper.rb,这会设置环境"test" 然后加载 Rails 环境。rake test,第一批(功能)运行良好,但第二批(单元)失败。失败是 ENV['RAILS_ENV] 以某种方式在批处理之间未设置,然后 config/environment.rb 看到没有设置并使用默认值 "development “。环境在 config/environment.rb 的开头和该文件中配置 block 的开头是正确的,但到最后是错误的。我可以通过使用 puts 或删除 config/development.rb 导致它找不到文件来判断。rake test:units,我会遇到与第二批 rake test 相同的问题(即全部失败)rake test:functionals,我会得到与 rake test:units 相同的结果rake test RAILS_ENV=test 或 rake test:units RAILS_ENV=test 或 rake 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']。
最佳答案
为了给你一个完整的答案,我必须看一下代码,但我会尽量给你一些可能有用的线索。
首先,rake test 和所有其他变体(test:units、test:functionals 等)的工作方式如下
test,这就是 development.rb 的原因始终阅读。ps 或pstree 验证),这是获取了 test_helper.rb 并将环境设置为测试。当您运行 ruby test/unit/my_test.rb 时,第一步被跳过,所以看起来问题出在那里。也许您在 development.rb 中做了一些对子进程有副作用的事情?
关于ruby-on-rails - 为什么要测试:units and test:functionals insist on running in development environment?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/991038/