Tôi mới tham gia FactoryGirl và tôi đang thử kịch bản đơn giản sau đây?Nhà máy Cô gái tạo liên kết với đối tượng hiện có
factory :female, :class => Gender do
code 'Female'
end
factory :male, :class => Gender do
code 'Male'
end
factory :papas, :class => Customer do
first_name 'Jim'
last_name 'Papas'
association :gender, :factory => :male, :strategy => :build
end
factory :dumas, :class => Customer do
first_name 'Mary'
last_name 'Dumas'
association :gender, :factory => :female, :strategy => :build
end
Sau đó, trong thử nghiệm của tôi:
create(:male)
create(:female)
create(:papas)
create(:dumas)
Lưu ý rằng lớp khách hàng có assocation belongs_to
Gender
lớp và một quy tắc xác nhận rằng nói rằng gender_id
nên có mặt. Tôi cũng có một xác nhận trên Gender
lớp cho tính duy nhất trên mã.
Trên create(:papas)
tuyên bố ở trên, trong thử nghiệm của mình, tôi nhận được lỗi rằng Customer
sẽ được tạo không hợp lệ, vì gender_id
là nil
.
Nếu tôi loại bỏ các hiệp hội :strategy => :build
trên Customer
:papas
nhà máy với giới tính, sau đó tôi sẽ gặp phải lỗi, mà khi cố gắng tạo :papas
, mã cho giới đã tồn tại.
Tôi cần làm gì để thử nghiệm của tôi tạo dữ liệu theo yêu cầu ở trên?
Lưu ý rằng tôi muốn có giới tính được tạo mà không có khách hàng, trong các thử nghiệm khác. Đừng nói với tôi để tạo ra các khách hàng với nhà máy tạo ra các lệnh và để cho khách hàng tạo ra các giới tính cùng một lúc. Điều này sẽ không hiệu quả nếu tôi cố gắng tạo ra hai khách hàng cùng giới tính.
Ngoài ra, phải có một câu trả lời tốt hơn so với một:
@male = create(:male)
@female = create(:female)
create(:papas, :gender => @male)
create(:dumas, :gender => @female)
(.? Khi sử dụng đồ đạc những điều này đã sẵn sàng out-of-the-box: Tôi phải trở về cố định)
Mặc dù khá dài dòng vs đồ đạc, câu trả lời của bạn là đúng. Tôi đã sử dụng cô gái nhà máy trong hai tháng qua và vẫn còn dự án tiếp theo của tôi sẽ được với đồ đạc! –
Lợi thế bạn có thể tìm thấy với các nhà máy là nếu bạn cần tạo nhiều khách hàng khác nhau. Bạn có thể có một nhà máy male_customer và female_customer và sử dụng các nhà máy đó làm nhà máy cha mẹ cho các khách hàng khác nhau của bạn - làm giảm đáng kể độ dài. Vui mừng nó làm việc mặc dù! – Shadwell