2011-01-23 24 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

あなたができる独立したテストを生成するには:スペックファイルは、すべての標準的なルビーは、その場でテストを生成するために構築に使用できるRubyスクリプトのような単純な実行されるため

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

を。

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 
関連する問題