Возможно ли иметь параметризованные спецификации в 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
мне это не нравится, потому что он использует циклы, он не читается, и он отображается только как одна спецификация при запуске, я бы лучше пусть это покажут как два разных теста.
1 ответов
для создания отдельных тестов вы можете сделать:
[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