我需要运行两次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
答案 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