Rails单元测试可以在不同于测试的环境下运行吗?

fut*_*eal 9 testing unit-testing ruby-on-rails

我们在Rails下有一个大型的多开发人员项目,我们正在使用模型和控制器的测试.现在,开发人员必须在运行测试之前切换"测试"环境的数据库参数以匹配其本地开发环境.我想知道是否有办法在"测试"以外的任何环境中运行这些测试?

例如我们在database.yml中:

test:
  database: ...
  host: ...
  username: ...
  password: ...
...
dev-one:
  ...
dev-two:
  ...
Run Code Online (Sandbox Code Playgroud)

我在文档中找不到任何关于此的内容,但也许我在找错了地方.有任何想法吗?

谢谢!

Roa*_*ter 0

只需在要运行测试时显式指定环境即可。您只需要事先做好一些准备。

假设您的新环境将被命名为“testjohn”(可能是针对名为 John 的开发人员)。然后:

1-将config/environments/test.rb复制到config/environments/testjohn.rb

2- 将相应的 DB 节添加到config/database.yml(从测试节复制它,重命名它,然后大概更改数据库名称、密码和其他数据)。我的(相当简单的)示例使用了这个:

testjohn:
  adapter: sqlite3
  database: db/testjohn.sqlite3
  pool: 5
  timeout: 5000
Run Code Online (Sandbox Code Playgroud)

3- 按如下方式运行测试:

RAILS_ENV="testjohn" rake db:migrate
RAILS_ENV="testjohn" rake test:units
Run Code Online (Sandbox Code Playgroud)

顺便说一句,由于 RAILS_ENV 只是一个环境变量,因此您可能有一个预先设置它的脚本,甚至让每个开发人员在他的.profile或其他文件中配置自己的 RAILS_ENV 变量。这样他们只需运行rake 测试:单元和测试会在他们的个性化环境下自动执行。

  • 感谢您的回复,但这正是我所尝试过的,但它不起作用。您在 RAILS_ENV 中指定的环境确实是在 rake 任务的上下文中加载的,但是,一旦 ruby​​ 执行您的测试,它就会默默地切换到您的测试环境并清除测试数据库并加载您的装置。经过更多研究后,这种行为似乎被深深地编码到 Test::Unit 中,我有点放弃这种可能性。但仍然非常愿意接受建议。 (2认同)