FactoryGirl.create
テスト内で保存されたモデルが必要な場合、以下のように書く
let!(:product) do
FactoryGirl.create(:product)
end
で複数必要な場合はこんな感じに書いてたんですが、これやめたほうがいいです
let!(:products) do
2.times{ FactoryGirl.create(:product) }
end
何故かというとarrayの順序と、DBから取得した時の順序が保証されないんですよね。
let!(:products) do
2.times{ FactoryGirl.create(:product) }
end
it 'should equal' do
expect(products).to eq(Product.all) # これはテストを実行する度に順序が変わる可能性がある
end
じゃあ順序を保証するためにどうするのか?
一瞬、sleep
…?と頭によぎりましたがこれもやめましょう
FactoryGirl.create_list
あるよね。そりゃあるよね。
let!(:products) do
FactoryGirl.create_list(:product, 2)
end
it 'should equal' do
expect(products).to eq(Product.all)
end
サクセス!