2011-01-23 84 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 
相关问题