2011-01-23 8 views
13

Jeśli mam specyfikację, która musi być uruchamiana z różnymi wartościami, aby była to prawdziwa implementacja, a nie naiwna. Przykład:Czy można sparametryzować specyfikacje w RSpec?

it "should return 'fizz' for multiples of three" do 
    @fizzbuzz.get_value(3).should == "fizz" 
end 

Do tej pory nie znalazłem żadnego sposobu, aby przekazać 3 jako parametr. Poniższa specyfikacja rozwiązuje mój problem, ale zastanawiam się, czy jest to zalecany sposób, aby to zrobić, czy jest jakikolwiek inny, lepszy sposób.

it "should return 'fizz' for multiples of three" do 
    [3, 6].each{|number| @fizzbuzz.get_value(number).should == "fizz" } 
end 

nie podoba mi się to, ponieważ wykorzystuje pętle, to nie jest czytelny i pokazuje tylko jako jeden ciemno kiedy biegać, wolałbym mieć go pokazać się jako dwóch różnych testów.

Odpowiedz

20

Aby wygenerować oddzielne testy można zrobić:

[3, 6].each do |num| 
    it "should return 'fizz' for multiples of three (#{num})" do 
    @fizzbuzz.get_value(num).should == "fizz" 
    end 
end 

Ponieważ Spec pliki są proste run jako skrypty ruby ​​można korzystać ze wszystkich średnia rubin konstruuje do generowania testów w locie.

Jeszcze lepiej można użyć Numeric#step, aby łatwo wygenerować określony zakres testów, np. za [3, 6, 9, 12, 15, 18]:

3.step(18, 3) do |num| 
    it "should return 'fizz' for multiples of three (#{num})" do 
    @fizzbuzz.get_value(num).should == "fizz" 
    end 
end 
Powiązane problemy