Ruby 你将如何测试这个?我想在不同的条件下多次测试一组规格

Ruby 你将如何测试这个?我想在不同的条件下多次测试一组规格,ruby,ruby-on-rails-3,rspec,tdd,Ruby,Ruby On Rails 3,Rspec,Tdd,我有一套使用RSpec2和Capybara编写的请求规范。这里有一个例子: require 'spec_helper' describe "Product Display and Interactions" do it "should hide the price and show SOLD OUT in the product listing when appropriate" do @product = Factory.create(:sold_out_product)

我有一套使用RSpec2和Capybara编写的请求规范。这里有一个例子:

  require 'spec_helper'
  describe "Product Display and Interactions" do

  it "should hide the price and show SOLD OUT in the product listing when appropriate" do
    @product = Factory.create(:sold_out_product)
    @product.sale = @sale
    @product.save!
    visit(sale_path(@sale))
    @product.sold_out?.should eq(true)
    find("#product_#{@product.id}").should have_content('Sold Out')
  end

  [...]

  end
问题是我有几个不同的视图模板出售,每个都有自己的产品视图部分。是否有一种简单明了的方法来指导RSpec每次运行一系列具有不同条件的规范?在这种情况下,我想在@sale记录上设置一个属性,然后重新运行所有规格


或者有更好的方法来测试这个场景?我对RSpec和Rails都是新手。

有“更好”的方法来测试这一点,但是,目前,如果您是新手,我建议您在不混淆问题的情况下习惯测试和Rails

您可以针对当前的情况执行以下操作。这将为@sale#attribute_to_alter上的每个变体创建一个单独的示例

require 'spec_helper'
describe "Product Display and Interactions" do

    ["attr_value_1", "attr_value_2"].each do |sale_attr_value|
      it "should hide the price and show SOLD OUT in the product listing when sale attribute is set to #{sale_attr_value}" do
        @product = Factory.create(:sold_out_product)
        @sale.attribute_to_alter = sale_attr_value
        @product.sale = @sale
        @product.save!
        visit(sale_path(@sale))
        @product.sold_out?.should eq(true)
        find("#product_#{@product.id}").should have_content('Sold Out')
      end
    end

  [...]

end