在 Rails 5+ 中的自定义测试文件夹中运行测试

问题描述 投票:0回答:1

当我想运行所有模型测试时,我们会这样做

rails test:models

如果我同样想运行位于名为

service_objects
的文件夹(在
test
文件夹中)中的测试 - 所需的步骤是什么?


受到multiplesources的启发,我在

lib/tasks
中尝试了以下方法:

namespace :test do
  Rails::TestTask.new(classes: 'test:prepare') do |t|
    t.pattern = 'test/service_objects/**/*_test.rb'
  end
end

但是运行

rails test:service_objects
会返回此错误消息:

NameError:未初始化的常量 Rails::TestTask

ruby-on-rails ruby-on-rails-5
1个回答
7
投票

将 Rails::TestTask 替换为 Rails::TestUnit::Runner,如下面的文件所示,并在顶部指示需要路径。

然后要仅运行 test/focused 目录中的测试,您可以调用

rails test:focused

要运行测试目录中的所有测试(除了 test/long_running 中的测试),您可以调用

rails test:without_long_running

使用 Rails 5.1.6 进行测试

新的 Rails 5 测试运行器确实有一些非常有用的功能,但有时您仍然需要更多的控制。

# lib/tasks/test_tasks.rake

require "rails/test_unit/runner"

namespace :test do
  task :focused => "test:prepare" do
    $: << "test"
    test_files = FileList['test/focused/*_test.rb']
    Rails::TestUnit::Runner.run(test_files)
  end

  task :without_long_running_tests => "test:prepare" do
    $: << "test"
    test_files = FileList['test/**/*_test.rb'].exclude('test/long_running/**/*_test.rb')
    Rails::TestUnit::Runner.run(test_files)
  end
end

信用应转到 jonatack 2015 年 5 月的帖子:https://github.com/rails/rails/issues/19997

Rails 7 更新:

namespace :test do
  task :without_long_running_tests => "test:prepare" do
    if !Rails.env.test?
      system("rails test:without_long_running_tests RAILS_ENV=test")
    else
      $: << "test"
      test_files = FileList['test/**/*_test.rb'].exclude('test/long_running/**/*_test.rb')
      Rails::TestUnit::Runner.run(test_files)
    end
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.