Shani
Shani

Reputation: 2541

FactoryBot how to create factories for inter related models

I am trying to write RSpec tests for legacy ROR app. I have following models

class Domain < ActiveRecord::Base
  belongs to :account
  ...
end
class Account < ActiveRecord::Base
  belongs to :domain
  ...
end

FactoryBot.define do
  factory :domain do
    name 'domain-1'
    account { association :account, domain: @instance }
  end
end
FactoryBot.define do
  factory :account do
    name 'account-1'
    domain { association :domain, account: @instance }
  end
end

I can create

FactoryBot.create(:domain) but FactoryBot.create(:account) fails with Domain can't be blank

Upvotes: 0

Views: 1551

Answers (1)

Moeen
Moeen

Reputation: 412

in a normal scenario account and domain has one to many relation. so every domain has one account and account can have many domains.

class Domain < ActiveRecord::Base
  belongs_to :account
  ...
end
class Account < ActiveRecord::Base
  has_many :domains
  ...
end

your factories called each other recursively. it should work:

FactoryBot.define do
  factory :domain do
    name 'domain-1'
    account
  end
end
FactoryBot.define do
  factory :account do
    name 'account-1'
  end
end

Upvotes: 4

Related Questions