如何在 rake 任务中调用 RSpec?

Phi*_*man 1 ruby rake rspec ruby-on-rails

我们编写了一些必要的测试,但速度很慢。所以我们配置了 RSpec 来排除它们,除了在 Solano 上,我们设置了一个 ENV 变量。

# spec_helper
unless ENV['RUN_ALL_TESTS'] == 'true'
  config.filter_run_excluding :slow
end
Run Code Online (Sandbox Code Playgroud)

这是可行的,但我正在尝试编写一个 rake 任务,我们可以调用它通过设置相同的 ENV 变量然后运行套件来在本地运行每个测试。我在弄清楚如何触发 RSpec 时遇到了麻烦。这就是我现在所拥有的:

# all_tests.rake
require 'rspec/core/rake_task'

desc 'Run all tests, even those usually excluded.'
task all_tests: :environment do
  ENV['RUN_ALL_TESTS'] = 'true'
  RSpec::Core::RakeTask.new(:spec)
end
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它不运行任何测试。

我发现的大部分内容都是用于在测试中触发 rake 任务、测试 rake 任务或设置 Rakefile。我们正在使用rspec-rails,我们的默认 rake 任务已经设置。

Dav*_*uth 5

要通过其 rake 集成运行 RSpec,您需要定义一个任务并调用它:

# all_tests.rake
require 'rspec/core/rake_task'

# Define the "spec" task, at task load time rather than inside another task
RSpec::Core::RakeTask.new(:spec)

desc 'Run all tests, even those usually excluded.'
task all_tests: :environment do
  ENV['RUN_ALL_TESTS'] = 'true'
  Rake::Task['spec'].invoke
end
Run Code Online (Sandbox Code Playgroud)

Rake::Task['spec'].invoke尝试时什么也没做,因为 rakeRake::FileTask在命令行和Rake::Task. 你没有'spec'定义任务,但你有一个spec目录,所以rake spec没有错误地运行并且什么也没做。