Viết FactoryBot quan hệ cho custom association

Đăng bởi Lưu Đại vào ngày 18-12-2022
Bình thường FactoryBot cung cấp cơ chế để định nghĩa association trong factories của Rails.
factory :user 
	department 
end
Trong models sẽ có quan hệ như sau
class User < ApplicationRecord
	belongs_to department 
end

Nhưng mình đã từng gặp trường hợp do thay đổi cấu trúc database nên phải dùng song song cả quan hệ cũ và quan hệ mới ( mục đích là để các API cũ vẫn sử dụng tiếp được ) 
Ví dụ một quan hệ như sau:
class User < ApplicationRecord 
	has_many :pets
	has_many :user_pets 
  has_many :original_pets, class_name: Pet.name, through: :user_pets
end

class UserPet < ApplicationRecord  
  belongs_to :user  
  belongs_to :original_pets, class_name: Pet.name, primary_key: :id, foreign_key: :pet_id
end 
Như vậy các API mới sẽ sử dụng quan hệ mới trong khi các API cũ sẽ được sửa dần dần.
Khi viết test mình phải tạo factory bot cho quan hệ mới
factory :original_pet, class: Pet
   ...
end

factory :user_pet
  user 
  original_pets
end