LoginSignup
47
31

More than 3 years have passed since last update.

RSpecでFactoryBotから複数のインスタンスをまとめて作成する【create_listを使用】

Posted at

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

以上です。

47
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
31