2011-01-23 17 views
13

Se ho una specifica che deve essere eseguita con valori diversi per far sì che guidi un'implementazione reale e non ingenua. Un esempio:È possibile avere specifiche parametrizzate in RSpec?

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

Finora non ho trovato alcun modo per passare 3 come parametro. Le specifiche di seguito risolvono il mio problema, ma mi chiedo se è il modo consigliato per farlo o se esiste un altro modo migliore.

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

Non mi piace questo perché utilizza i loop, non è leggibile e si vede solo come uno spec quando correre, avrei preferito che mostrano come due diversi test.

risposta

20

Per generare test separati che si potrebbe fare:

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

Poiché i file spec sono semplici Esegui come script Ruby che è possibile utilizzare tutti gli standard rubino costruisce per generare le prove al volo.

Ancora meglio è possibile utilizzare Numeric#step per generare facilmente un determinato intervallo di test, ad es. per [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 
Problemi correlati