76

In one of my RSpec test, I am creating multiple objects from the same factory definition

Eg

FactoryBot.create(:model_1)
FactoryBot.create(:model_1)
FactoryBot.create(:model_1)

Is there a method that factory_bot provides to do this in one line

I know that I can do

3.times {FactoryBot.create(:model_1)}

But I am looking for something that factory_bot provides for creating multiple objects of the same model.

Note: FactoryBot was originally named FactoryGirl

Arturo Herrero
  • 12,772
  • 11
  • 42
  • 73
usha
  • 28,973
  • 5
  • 72
  • 93

4 Answers4

139

You can create a list like this (hence create x objects at once):

FactoryBot.create_list(:model_1, 3)

Documentation lives here.

Note: FactoryBot was originally named FactoryGirl

notapatch
  • 6,569
  • 6
  • 41
  • 45
apneadiving
  • 114,565
  • 26
  • 219
  • 213
15
FactoryBot.create_list :factory_name, 2, attribute_name: 'value'

Simple and best way to move.

You can ignore the attribute names if not needed the same, and use sequence instead.

notapatch
  • 6,569
  • 6
  • 41
  • 45
Nishutosh Sharma
  • 1,926
  • 2
  • 24
  • 39
8

Not sure if this has been updated since the answer was posted, but now you would do the following

FactoryBot.create_list(:model_1, 3)

see Getting Started

notapatch
  • 6,569
  • 6
  • 41
  • 45
cromac
  • 133
  • 2
  • 4
4

If you need to do this for a model with validation, I was able to do the following in my test.

10.times do |i|
  create(
    :object,
    property: i
  )
end
Cody Elhard
  • 655
  • 1
  • 7
  • 17