2017-01-05 85 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/