RSpecテストを書いているときに、複数のインスタンスをまとめて作れる便利メソッドcreate_list
をご紹介します。
例えば下記のようにnote
のファクトリが定義されているとします。
factory/notes.rb
FactoryBot.define do
factory :note do
title { 'sample-note' }
description { 'sample-description' }
end
end
テストでnote
インスタンスを5つ作りたいと思ったとき、下記のように1つずつ作るのは大変です。
spec/system/xxx_spec.rb
RSpec.describe 'yyyy' do
let(:note1) { create(:note) }
let(:note2) { create(:note) }
let(:note3) { create(:note) }
let(:note4) { create(:note) }
let(:note5) { create(:note) }
...
end
ここで登場するのがcreate_list
です。
これを使えば、まとめてnoteインスタンスを作成することが可能です。
spec/system/xxx_spec.rb
RSpec.describe 'yyyy' do
notes = create_list(:note, 5)
...
end
第1引数に元になるファクトリ、第2引数に作成する数を指定します。
(notes =
の部分は無くても可)
ちなみに属性の一部を上書きして作成することも可能です(下記参照)。
spec/system/xxx_spec.rb
RSpec.describe 'yyyy' do
notes = create_list(:note, 5, title: 'Hello, World')
...
end
以上です。