2013-07-10 22 views
22

Theo mặc định, FactoryGirl gọi các nhà máy của các hiệp hội để tạo chúng. Tôi có thể chuyển một liên kết cho một nhà máy như một tham số. Nhưng làm thế nào tôi có thể vượt qua một đối tượng mà nên được sử dụng sâu trong chuỗi hiệp hội?Cách chuyển tham số thông qua chuỗi liên kết trong FactoryGirl

Ví dụ:

Tôi có một Bài đăng có Trình quản lý bài đăng có Tài khoản thuộc về current_user.

Khi tôi thực hiện Factory(:post) nó tạo ra một Trình quản lý bài viết, tạo một Tài khoản, không thuộc về current_user (được lưu).

Vì vậy, trong thông số kỹ thuật sử dụng các nhà máy bài tôi phải làm:

account = Factory(:account, user: current_user) 
post_manager = Factory(:post_manager, account: account) 
post = Factory(:post, post_manager: post_manager) 

Những gì tôi muốn làm là gọi điện cho nhà máy với Factory(:post, user: current_user), và sau đó vượt qua current_user tất cả các cách thức thông qua các hiệp hội đến Nhà máy tài khoản. Có cách nào để làm điều đó không?

+0

Bạn có thêm ví dụ về mã không. –

+0

Đọc http://sscce.org. Nếu không có thêm thông tin, chúng tôi không thể cung cấp cho bạn câu trả lời chính xác. –

+0

Anh ấy hỏi xem các thuộc tính có thể được chuyển xuống thông qua các liên kết nếu chúng không tồn tại trên các mô hình ban đầu hay không. Điều này có thể được thực hiện với các thuộc tính tạm thời. Tôi có câu trả lời nếu bạn sẽ mở lại câu hỏi. –

Trả lời

21

Không chắc bạn đang sử dụng phiên bản FactoryGirl nào, nhưng nếu bạn đang sử dụng bất kỳ phiên bản gần đây nào (2.6+), bạn có thể sử dụng Thuộc tính thoáng qua (đọc thêm trên "Getting Started" page). Bạn có thể làm điều gì đó như sau:

FactoryGirl.define do 

    factory :post do 
    ignore do 
     user nil 
    end 
    posts_manager { FactoryGirl.build(:posts_manager, :user => user) } 
    end 

    factory :posts_manager do 
    ignore do 
     user nil 
    end 
    account { FactoryGirl.build(:account, :user => user) } 
    end 

    factory :account do 
    user { user } 
    end 

end 

FactoryGirl.create(:post, :user => current_user) 
+1

Tôi ước gì tôi đã tìm thấy điều này 2 năm trước đây. – stringsn88keys

+3

Đối với các phiên bản gần đây của FactoryGirl, sử dụng 'transient' thay cho' ignore' –