Как бы вы это проверили?Я хочу протестировать набор спецификаций несколько раз в различных условиях - PullRequest
0 голосов
/ 07 ноября 2011

У меня есть набор спецификаций запросов, написанных с использованием 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.

1 Ответ

1 голос
/ 07 ноября 2011

Есть «лучшие» способы проверить это, но на данный момент, если вы новичок, я бы порекомендовал привыкнуть к тестированию и рельсам, не путая проблему.

Вы можете сделать что-то вроде следующего для вашей текущей ситуации. Это создаст отдельный пример для каждого варианта @ 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
...