Возможно ли иметь параметризованные спецификации в 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