2012-01-20 15 views
8

Chcę przetestować metodę zdefiniowaną w zadaniu rake.Testowanie metody zdefiniowanej w zadaniu rake

plik grabie

#lib/tasks/simple_task.rake 
namespace :xyz do 
    task :simple_task => :environment do 
     begin 
      if task_needs_to_run? 
       puts "Lets run this..." 
       #some code which I don't wish to test 
       ... 
      end 
     end 
    end 
    def task_needs_to_run? 
     # code that needs testing 
     return 2 > 1 
    end 

end 

Teraz chcę przetestować tę metodę, task_needs_to_run? w pliku testowego Jak to zrobić?

Dodatkowa uwaga: Chciałbym również chcieć przetestować inną prywatną metodę w zadaniu rake ... Ale mogę się o to później martwić.

Odpowiedz

6

można po prostu to zrobić:

require 'rake' 
load 'simple_task.rake' 
task_needs_to_run? 
=> true 

Próbowałem to sobie ... definiowania metody wewnątrz przestrzeni nazw Rake jest taka sama jak jego zdefiniowaniem na najwyższym poziomie.

load ing Rakefile nie uruchamia żadnego z zadań ... po prostu je definiuje. Więc nie ma żadnej szkody w pliku Rakefile w skrypcie testowym, więc możesz przetestować powiązane metody.

+0

Czy możesz to wyjaśnić? Przykro mi, że nie mogłem nadążyć za – Garfield

+0

@Shikher, zrobiłem trochę eksperymentów i wymyśliłem znacznie lepszą odpowiedź. Spójrz! –

8

Zwykłym sposobem, aby to zrobić jest przeniesienie wszystkich rzeczywisty kod do modułu i pozostawić realizację zadań będzie tylko:

require 'that_new_module' 

namespace :xyz do 
    task :simple_task => :environment do 
    ThatNewModule.doit! 
    end 
end 

Jeśli używać zmiennych środowiskowych lub argumentu polecenia, po prostu przekazać je w:

ThatNewModule.doit!(ENV['SOMETHING'], ARGV[1]) 

W ten sposób można testować i modyfikować implementację bez dotykania zadania rake w ogóle.

Powiązane problemy