运行 测试安装在主机应用程序中时位于 Rails 引擎中
Run tests located in a Rails Engine when mounted in host application
我在名为“Blorgh”的引擎中进行了一些测试。我只是在引擎存储库的根目录中通过 运行 以下命令测试我的引擎。
rails test
...
19 runs, 8 assertions, 0 failures, 0 errors, 11 skips
简单。现在,Blorgh 已安装在应用程序中。
gem blorgh
此应用是使用包含测试步骤的管道部署的。我希望测试步骤执行已安装引擎的测试,以便管道在发现 Blorgh 引擎中的测试有问题时停止部署。
问题是当rails test
在宿主应用程序的根目录中执行时,它只查找特定于宿主应用程序的测试。
0 runs, 0 assertions, 0 failures, 0 errors, 0 skips
我如何在我的 Blorgh 引擎安装后执行测试?我搜索过高低。我愿意通过爬行 Blorgh::Engine.root
来完成我自己的任务,但我什至不确定 rails test
在幕后做了什么。
如果必须的话,您可以设置一个 rake 任务来只加载您需要的测试。主应用程序“测试”目录应该在您的加载路径中,因为 test/test_helper.rb
加载环境。
# lib/tasks/run_engine_tests.rake
task :run_engine_tests do
# Add main app `test` directory to load path
# This means requires such as `require "test_helper"` will load main app
# helper instead of engine helper. That's what we need to run the tests
# under our app, because engine's `test_helper.rb` loads dummy app.
$LOAD_PATH << Rails.root.join("test").to_s
# require tests from the engine that you need to run
Dir.glob(Blorgh::Engine.root.join("test/**/*_test.rb")).each { |f| require f }
# rails magic does the rest
require "active_support/testing/autorun"
end
并进行快速测试
$ RAILS_ENV=test bin/rails run_engine_tests
Running 1 tests in a single process (parallelization threshold is 50)
Run options: --seed 12153
# Running:
hello from Blorgh
.
Finished in 0.004990s, 200.4139 runs/s, 200.4139 assertions/s.
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
使用RAILS_ENV=test
否则会加载测试环境两次。
作为参考,看看这些
https://github.com/rails/rails/blob/v7.0.2.3/railties/lib/rails/commands/test/test_command.rb#L29
https://github.com/rails/rails/blob/v7.0.2.3/railties/lib/rails/test_unit/runner.rb#L39
我在名为“Blorgh”的引擎中进行了一些测试。我只是在引擎存储库的根目录中通过 运行 以下命令测试我的引擎。
rails test
...
19 runs, 8 assertions, 0 failures, 0 errors, 11 skips
简单。现在,Blorgh 已安装在应用程序中。
gem blorgh
此应用是使用包含测试步骤的管道部署的。我希望测试步骤执行已安装引擎的测试,以便管道在发现 Blorgh 引擎中的测试有问题时停止部署。
问题是当rails test
在宿主应用程序的根目录中执行时,它只查找特定于宿主应用程序的测试。
0 runs, 0 assertions, 0 failures, 0 errors, 0 skips
我如何在我的 Blorgh 引擎安装后执行测试?我搜索过高低。我愿意通过爬行 Blorgh::Engine.root
来完成我自己的任务,但我什至不确定 rails test
在幕后做了什么。
如果必须的话,您可以设置一个 rake 任务来只加载您需要的测试。主应用程序“测试”目录应该在您的加载路径中,因为 test/test_helper.rb
加载环境。
# lib/tasks/run_engine_tests.rake
task :run_engine_tests do
# Add main app `test` directory to load path
# This means requires such as `require "test_helper"` will load main app
# helper instead of engine helper. That's what we need to run the tests
# under our app, because engine's `test_helper.rb` loads dummy app.
$LOAD_PATH << Rails.root.join("test").to_s
# require tests from the engine that you need to run
Dir.glob(Blorgh::Engine.root.join("test/**/*_test.rb")).each { |f| require f }
# rails magic does the rest
require "active_support/testing/autorun"
end
并进行快速测试
$ RAILS_ENV=test bin/rails run_engine_tests
Running 1 tests in a single process (parallelization threshold is 50)
Run options: --seed 12153
# Running:
hello from Blorgh
.
Finished in 0.004990s, 200.4139 runs/s, 200.4139 assertions/s.
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
使用RAILS_ENV=test
否则会加载测试环境两次。
作为参考,看看这些
https://github.com/rails/rails/blob/v7.0.2.3/railties/lib/rails/commands/test/test_command.rb#L29
https://github.com/rails/rails/blob/v7.0.2.3/railties/lib/rails/test_unit/runner.rb#L39