2017-01-05 38 views
0

我需要运行我的rake测试两次才能测试我的Ruby gem的缓存系统。无论是运行测试之前,我需要清除我的应用程序的缓存与我如何运行我的耙测试两次?

require 'lib/gem_name' 
Gem.cache.clear 

然后,我只需要运行两次test任务。我试过把上面的代码放在我的Rakefile的顶部,并在我的rake任务中列出了两次测试文件,但由于没有正确加载路径,因此我收到了cannot require such file错误。

我需要一种有效的方式来运行测试两次,而不是在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 
+1

这个shell脚本就足够了吗? 'ruby -e“需要'lib/gem_name'; Gem.cache.clear”;耙测试;耙测试;' –

+0

这是一个很好的建议,但由于我使用Travis CI来测试我的构建,我宁愿只能运行'rake test'一次,而不必担心运行脚本。 – cobaltsoda

+0

否则这就是我一直在寻找的确切功能,我只是喜欢它的Ruby形式。 – cobaltsoda

回答

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 
1

您可以重新启用任务,如:

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

,优于重新启用,因为重新启用应该是这样的:

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/