Pracuję nad aplikacją ROR, która polega na wielu niestandardowych zadaniach rake.Testowe zadania rake'u
Jaki jest najlepszy sposób ich przetestowania?
Pracuję nad aplikacją ROR, która polega na wielu niestandardowych zadaniach rake.Testowe zadania rake'u
Jaki jest najlepszy sposób ich przetestowania?
Zadania rake są dość trudne do przetestowania. Najprostszym rozwiązaniem byłoby przeniesienie logiki do metody w odpowiednim modelu. Możesz przetestować to i po prostu wywołać metodę z zadania rake.
to dość dobrze opisane w another SO question
moje zalecenie, powtarzające się tutaj w skrócie, to nie próbować zadania testowania Zgrabiarka: wyodrębnić kod należy badać do klasy modelu lub funkcji lib i przetestować go tam. Następnie użyj prowizji, aby wywołać funkcje i zarządzać zależnościami.
Coś jak:
def execute_rake(file,task)
require 'rake'
rake = Rake::Application.new
Rake.application = rake
Rake::Task.define_task(:environment)
load "#{Rails.root}/lib/tasks/#{file}"
rake[task].invoke
end
Na swojej specyfikacji:
execute_rake("tags.rake","tags:popular")
rake [zadanie] .invoke zamiast rake [tagi] .invoke – standup75
niesamowite odpowiedzi. Ten ładunek sprawił, że podczas testowania zadań rake'owych dla klejnotów. –
To jest zły pomysł. To działa, dopóki nie będziesz musiał używać prowizji, aby uruchomić testy. W takim przypadku twoje testy zakończą się bezgłośnie z niezerowym kodem wyjścia, ale rspec będzie zgłaszać wszystkie testy. –
Lubię PivotalLabs' way najbardziej. Ja jednak uogólniać i modyfikować swój kod, jak na moim app:
# file: spec/tasks/my_rake_file_spec.rb
require 'spec_helper'
require 'rake'
describe 'my_rake_file.rake' do
before :all do
Rake.application.rake_require 'tasks/my_rake_file'
Rake::Task.define_task(:environment)
end
let(:run_rake_task) {
Rake::Task[task_name].reenable
Rake.application.invoke_task task_name
}
describe 'my_task_name' do
let(:task_name) { "my_task_name" }
it "creates 10 cars" do
run_rake_task
Car.count.should == 10
end
end
end
Również ja ekstrakcji podnoszenia ciężkich kodu my_rake_file.rake do modułu, który jest przechowywany w lib/
dobrze, teraz istnieje Gem za to:
Fantaskspec - https://github.com/crismali/fantaskspec
Myślę, że ta propozycja jest przyzwoity, ale to nie jest odpowiedź na pytanie. Nie powinieneś zanieczyszczać modeli, aby uruchamiać skrypty wsadowe itp. Na swoich danych. –
Mam lepszą odpowiedź tutaj: http://stackoverflow.com/a/926100/94120 –