如何有目的地进行两次rake测试?

时间:2017-01-05 23:10:02

标签: ruby rubygems rake

我需要运行两次rake测试才能测试Ruby gem的缓存系统。在两个测试运行之前,我需要使用

清除应用程序的缓存
require 'lib/gem_name'
Gem.cache.clear

然后我只需要运行test任务两次。我已尝试将上述代码放在Rakefile的顶部并在我的rake任务中列出测试文件两次,但由于gem cannot require such file我收到lib错误路径未正确加载。

我需要一种有效的方法来运行测试两次,而不是在IRB中运行缓存清空代码,然后在命令行上运行rake test两次。

我的Rakefile看起来像这样:

require 'rake/testtask'

Rake::TestTask.new do |t|
  t.libs << 'test'
  t.test_files = FileList['tests/test_*.rb']
  t.loader = :testrb
end

desc 'Run gem tests'
task default: :test

2 个答案:

答案 0 :(得分:1)

您可以重新启用以下任务:

task :test do |task|
    task.execute 1
    task.execute 2
    task.execute 3
end

优于reenable,因为reenable看起来像这样:

task :test do |task|
    task.invoke 1
    task.reenable
    task.invoke 2
    task.reenable
    task.invoke 3
end

您可以在此处阅读有关执行vs调用的更多信息:https://blog.simplificator.com/2014/12/30/rake-execute-vs-invoke/

答案 1 :(得分:0)

在@maxple的评论和@ OneNeptune的回答的帮助下,我找到了实现我想要的方法。在我修改过的Rakefile下面,我设置了一个新任务来清除缓存,然后设置一个新的test任务,清空缓存并运行两次测试。

require 'rake/testtask'

desc 'Clear gem cache'
task :clear_cache do
  lib = File.expand_path('../lib', __FILE__)
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
  require 'gem_name'
  Gem.cache.clear
end

desc 'Perform tests exactly once'
Rake::TestTask.new(:run_tests) do |t|
  t.libs << 'test'
  t.test_files = FileList['tests/test_*.rb']
  t.loader = :testrb
end

desc 'Performs test setup and runs tests twice'
task :test do
  Rake::Task['clear_cache'].execute
  Rake::Task['run_tests'].execute
  Rake::Task['run_tests'].execute
end

task default: :test