2014-11-14 14 views
0

我正在嘗試測試工廠的訂單。 (1)我需要編寫一個測試來測試工廠的訂購是否正確。所以我假設我必須創建工廠,然後改變結果然後對它們進行排序。創建多個工廠以測試訂購

此外,(2)我想知道是否有DRYer方式在工廠中創建多個項目。

規格/型號/ item_spec.rb

require 'rails_helper' 

RSpec.describe Item, :type => :model do 

    let(:item) { FactoryGirl.create(:item) } 
    let(:item2) { FactoryGirl.create(:item) } 
    let(:item3) { FactoryGirl.create(:item) } 

    it "should sort the items in order" do 
    # tests order 
    end 
end 

規格/工廠/ items.rb

FactoryGirl.define do 
    factory :item, :class => 'Item' do 
    name { Forgery::Name.name } 
    sequence(:ordering) 
    end 
end 

回答

0

在這裏的某處,您正在測試FactoryGirl是否正常工作。假設ordering有一定的排序機制,你也可以測試該比較器工作是否正常:

expect(generate(:ordering) <=> generate(:ordering)).to eq(-1) 
# because 
expect(1 <=> 2).to eq(-1) 

如果一個類似於在readme電子郵件序列,你的排序是不正確,它可能在FactoryGirl錯誤。

+0

儘管從解決OP的直接需求的角度來看,我很喜歡@Pete的答案。 –

+0

謝謝,我意識到我正在測試錯誤的東西。 – AGirlThatCodes

+0

它從來不是一個壞主意,檢查出基本假設。你可以在寫完後刪除測試:) –

1

在類似的情況下,我使用Ruby的.times方法(docs)至生成一定數量的Factory項目,然後將這些對象映射到一個數組中:

# spec/model/item_spec.rb 
require 'spec_helper' 

describe Item do 

    let(:items) {3.times.map {FactoryGirl.create(:item)} } # An array of Items 

    it "should sort the items in order" do 
    # tests order 
    end  
end 
+0

非常感謝!我選擇了傑克的迴應,並且因爲他能夠支持你的回覆。 (我希望我可以把支票給兩個)。再次感謝你。 – AGirlThatCodes

0
# spec/model/item_spec.rb 
require 'spec_helper' 

describe Item do 
    let(:items) { FactoryGirl.create_list(:item, 3) } 

    it "should sort the items in order" do 
    # tests order 
    end  
end 

也做同樣的事情。結帳docs