At some point however, your models may get too complicated and you may need an actual factory—a class that constructs an object and performs actions along with it.
class UserCreator attr_reader :user def initialize(attrs) @user = User.create(attrs) @user.profile = Profile.create(@user) @user.posts = create_sample_post end end
creator = UserCreator.create(name: 'John') creator.user
Factory Bot will then consume a class in this manner:
user = User.new user.name = 'John' user.save!
You can set up a
factory_bot factory to use this by passing a
class option. You'll have to make your factory implement these methods. This is silly and painful.
factory :real_user, class: 'UserCreator' do ... end