lundi 30 mai 2016

FactoryGirl How create a instance which is created by association on callback

Consider two models:

class User < ActiveRecord::Base

  has_one :book

  after_create :create_book
end

class Book < ActiveRecord::Base
  belongs_to :user

  validate_uniqueness :user_id
end

Each user can have and can only have one book. Then I have two Factory defined in my specs:

factory :user do
end

factory book do
  user
end

Then here's the question, when I am writing test for Book, I'd like to create a record book1(let's call it) for Book, when I use FactoryGirl.create(:book). It will create an instance of Book and then tries to create the association defined user. After creating the user, the after_create is trigger, and book2 is created for user. Then it tries to bind book1 with user and is blocked by the uniqueness association.

Now I am using book = FactoryGirl.create(:user).book. Is this the best/right way to do that? I think it's note so intuitive, as I am testing Book, I think it would be the best to have book = FactoryGirl.create(:book)

Thanks a lot.

Aucun commentaire:

Enregistrer un commentaire