2011-01-23 79 views
13

如果我有一個需要用不同的值運行的規範,才能推動真正的實現,而不是天真的實現。舉例:是否有可能在RSpec中有參數化的規格?

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

到目前爲止我還沒有找到任何方式將3作爲參數傳入。下面的規格解決了我的問題,但我想知道是否是推薦的方法或者是否有其他更好的方法。

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

,因爲它使用的循環,我不喜歡這樣,它不是可讀的,而且只顯示爲一個規範運行的時候,我寧願把它顯示爲兩個不同的測試。

回答

20

要生成單獨的測試,你可以這樣做:

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

由於規範文件是簡單的運行,你可以使用所有標準的Ruby構建以實時生成測試Ruby腳本。

更好的是,您可以使用Numeric#step輕鬆生成一定範圍的測試,例如,對於[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 
相關問題