2012-11-02 9 views
6

widzę, że jest możliwe, aby przekazywać argumenty do zadania natarcia:Czy można wysyłać argumenty do `grabienia ogórka` bez użycia zmiennych środowiskowych?

task :task_name, :arg_name do |t, args| 

Co chciałbym zrobić, to przekazywać argumenty do zadania ogórek natarcia:

Cucumber::Rake::Task.new({:tags => 'db:test:prepare'}) do |t, args| 
    t.cucumber_opts = ['--tags', #args?] 
end 

Czy ten rodzaj rzeczy możliwe? W ten sposób mógłbym:

rake cucumber:tags['tag1', 'tag2', ...] 

I niech uruchamiają tylko te znaczniki. Większość źródeł mówi, że użyję zmiennej środowiskowej, którą zrobiłem, ale wolałbym po prostu podać argumenty w "prawidłowy" sposób.

+1

to duplikat: http://stackoverflow.com/questions/825748/how-do-i-pass-command- line-arguments-to-a-rake-task –

+2

Nie, nie jest. To pytanie jest specyficzne dla ogórka, nie możesz dodać argumentów do zadań prowizji od ogórka, jak możesz w odpowiedzi na to pytanie. –

+0

Gotcha. Czy byłoby możliwe napisanie własnych zadań rake, które owijają te ogórki? –

Odpowiedz

0

Jedną z metod jest zmiana zmiennych środowiskowych: rake cucumber:tags TAGS=tag1,tag2, a następnie w twoim zadaniu rake, po prostu parsuj ARGV.

tags = ARGV[1].gsub(/.+=/, '') 

Cucumber::Rake::Task.new({:tags => 'db:test:prepare'}) do |t, args| 
    t.cucumber_opts = ['--tags', tags] 
end 

Można też uczynić go bardziej elastyczne jak to

tags_index = ARGV.index {|a| a.start_with?('TAGS') } 
tags = ARGV[tags_index].gsub(/.+=/, '') 

ale prawdopodobnie byłbyś lepszy z czymś OptionParser.

5

można zmusić go do pracy, robiąc coś takiego:

task :task_name, :arg1 do |t, args| 
    Cucumber::Rake::Task.new(:run) do |t| 
    t.cucumber_opts = "--format pretty --tags @#{args[:arg1]}" 
    end 
    Rake::Task[:run].invoke() 
end