2017-01-05 2 views
0

Ich muss meine rake Tests zweimal ausführen, um das Caching-System meiner Ruby-Edelstein zu testen. Bevor die beiden Tests laufen, muss ich mitWie kann ich meine Rake-Tests absichtlich zweimal durchführen?

require 'lib/gem_name' 
Gem.cache.clear 

meine App-Cache löschen dann zweimal nur die test Aufgabe ausführen müssen ich. Ich habe versucht, den obigen Code an der Spitze meiner Rakefile und Auflistung der Testdateien zwei Mal in meinem Rake-Task, aber ich erhalte cannot require such file Fehler aufgrund der Edelstein lib Pfade nicht richtig geladen werden.

Ich brauche eine effiziente Möglichkeit, den Test zweimal auszuführen, anstatt den Cache-Entleerungscode in IRB auszuführen und dann rake test zweimal in der Befehlszeile auszuführen.

Mein Rakefile sieht wie folgt aus:

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

würde dieses Shell-Skript ausreichen? 'ruby -e 'erfordert' lib/gem_name '; Gem.cache.clear'; Rechentest; Rake-Test; ' –

+0

Das ist ein guter Vorschlag, aber da ich Travis CI verwende, um meinen Build extern zu testen, würde ich lieber nur' rake test' ausführen können und mich nicht um Skripts kümmern müssen. – cobaltsoda

+0

Ansonsten ist das genau die Funktionalität, die ich gesucht habe, ich würde es einfach in Ruby Form mögen. – cobaltsoda

Antwort

0

Mit Hilfe von @ maxples Kommentaren und @ OneNeptunes Antwort habe ich einen Weg gefunden, das zu erreichen, was ich will. In meiner modifizierten Rakefile unten habe ich eine neue Aufgabe eingerichtet, um den Cache zu löschen, und dann eine neue test Aufgabe, die den Cache leert und die Tests zweimal ausführt.

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

Sie können entweder reaktivieren die Aufgabe wie:

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

, die überlegen ist wieder zu aktivieren, da reaktivieren würde wie folgt aussehen:

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

Sie können hier mehr über execute vs invoke lesen: https://blog.simplificator.com/2014/12/30/rake-execute-vs-invoke/

Verwandte Themen