6

tôi có một nhà máy FactoryGirl, tạo ra một Order nhưng trước (: tạo) gọi lại không tạo ra các đối tượng nhà máy liên quan:FactoryGirl trước (: tạo) gọi lại không tạo ra các hiệp hội

Lớp Chánh

class Order < ActiveRecord::Base 
    attr_accessible :tax, :total 
    has_many :order_lines 

    validates :user, presence: true 
    validates :order_lines , presence: true 
end 

Child Lớp

class OrderLine < ActiveRecord::Base 
    attr_accessible :order, :product, :qty 
    belongs_to :order 
    belongs_to :product 
    ... 
    ... 
    validates :order, presence: true 
end 

Factory

Factory :order do 
    ... 
    ignore do 
    number_or_order_lines 1 
    end 
    before(:create) do |order, evaluator| 
    FactoryGirl.create_list :order_line, evaluator.number_or_order_lines, order: order 
    end 
end 

Factory :order_line do 
    association :user 
    association :order 
    ... 
end 

VẤN ĐỀ

Trong thử nghiệm rspec của tôi, nếu tôi có thể tạo một đối tượng theo thứ tự:

describe Order do 
    before {@order = FactoryGirl.create(:order) } => #throws error (see below) 
end 

LỖI ActiveRecord :: RecordInvalid Validation thất bại thứ tự dòng có thể không được để trống

CẬP NHẬT

tuy nhiên tôi có thể làm thành công sau nhưng rõ ràng chỉ hoàn thành việc tạo ra một:

after(:build) do |order, evaluator| 
    order.order_lines << FactoryGirl.build(:order_line, order: order) 
end 

Giả thuyết - Tôi có thể xem nơi create_list có thể cố gắng để lưu các OrderLine đó sẽ gây ra một lỗi vì bố mẹ chưa được lưu - nhưng tôi không biết nếu nó vẫn trả về một đối tượng OrderLine chỉ ở trạng thái không hợp lệ và do đó bộ sưu tập order_lines trên đối tượng thứ tự vẫn không được để trống.

+4

Hãy thử sử dụng sau (: xây dựng) thay vì trước (: tạo) –

+0

cập nhật các vấn đề với thông tin mới - Tôi đã thử sau (: xây dựng) cũng như sử dụng build_list thay vì create_list. Thật không may, cách duy nhất nó sẽ hoạt động nếu xác nhận cho order_lines trên mô hình Order. – pghtech

+0

Tôi đang đối mặt với cùng một vấn đề –

Trả lời

6

Bạn cần phải đặt nhà máy Hang của bạn vào các bản ghi theo thứ tự như thế này

Factory :order do 
    ... 
    ignore do 
     number_or_order_lines 1 
    end 
    before(:create) do |order, evaluator| 
     order.order_lines << (FactoryGirl.create :order_line, order: order) 
    end 
    end 
+1

Cảm ơn bạn đã giúp tôi :) –

Các vấn đề liên quan