如何在 rake 任务中调用 RSpec?
How to invoke RSpec inside a rake task?
我们写了一些必要的测试,但是很慢。因此,我们配置 RSpec 以排除它们,除了在 Solano 上,我们在其中设置了一个 ENV 变量。
# spec_helper
unless ENV['RUN_ALL_TESTS'] == 'true'
config.filter_run_excluding :slow
end
这行得通,但我正在尝试编写一个 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
当我 运行 它时,它不会 运行 任何测试。
我发现的大部分内容都是用于在测试中触发 rake 任务、测试 rake 任务或设置 Rakefile。我们正在使用 rspec-rails
,我们的默认 rake 任务已经设置好。
为了 运行 RSpec 通过其 rake 集成,您需要定义一个任务并调用它:
# 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
Rake::Task['spec'].invoke
当你尝试它时什么也没做,因为 rake 在命令行和在 Rake::Task
。你没有定义 'spec'
任务,但是你有一个 spec
目录,所以 rake spec
运行 没有错误,什么也没做。
我遇到了类似的问题,其中 bundle exec rake default
会正确地创建一个 RSpec::Core::RakeTask
,但是 bundle exec rake spec
会在 spec
目录中创建一个 Rake::FileTask
,用 bundle exec rake spec --trace
输出:
** Invoke spec (first_time, not_needed)
原来 rspec-rails
在 :test
gem 组中,它需要 (per the docs) 在 :test
和 :development
.
有趣的是 (?),一旦我这样做了,以前只在 :test
组中的 gem 也可以从规范中获得,即使在使用 RAILS_ENV=development
启动时也是如此。我认为 rspec-rails
在幕后进行了一些魔法环境恶作剧。
我们写了一些必要的测试,但是很慢。因此,我们配置 RSpec 以排除它们,除了在 Solano 上,我们在其中设置了一个 ENV 变量。
# spec_helper
unless ENV['RUN_ALL_TESTS'] == 'true'
config.filter_run_excluding :slow
end
这行得通,但我正在尝试编写一个 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
当我 运行 它时,它不会 运行 任何测试。
我发现的大部分内容都是用于在测试中触发 rake 任务、测试 rake 任务或设置 Rakefile。我们正在使用 rspec-rails
,我们的默认 rake 任务已经设置好。
为了 运行 RSpec 通过其 rake 集成,您需要定义一个任务并调用它:
# 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
Rake::Task['spec'].invoke
当你尝试它时什么也没做,因为 rake 在命令行和在 Rake::Task
。你没有定义 'spec'
任务,但是你有一个 spec
目录,所以 rake spec
运行 没有错误,什么也没做。
我遇到了类似的问题,其中 bundle exec rake default
会正确地创建一个 RSpec::Core::RakeTask
,但是 bundle exec rake spec
会在 spec
目录中创建一个 Rake::FileTask
,用 bundle exec rake spec --trace
输出:
** Invoke spec (first_time, not_needed)
原来 rspec-rails
在 :test
gem 组中,它需要 (per the docs) 在 :test
和 :development
.
有趣的是 (?),一旦我这样做了,以前只在 :test
组中的 gem 也可以从规范中获得,即使在使用 RAILS_ENV=development
启动时也是如此。我认为 rspec-rails
在幕后进行了一些魔法环境恶作剧。