2009-11-04 32 views
5

Tôi thường sử dụng bước này để thiết lập hồ sơ với factory_girl:Thực tiễn tốt nhất để thiết lập liên kết với factory_girl trong dưa chuột là gì?

Given /^the following (.+) records?:$/ do |factory, table| 
    table.hashes.each do |hash| 
    Factory(factory, hash) 
    end 
end 

Và đây là công việc xung quanh tôi khi thiết lập các hiệp hội:

Given the following group record: 
    | id | name | 
    | 1 | foo | 
And the following item records: 
    | name | group_id | 
    | bar | 1  | 
    | baz | 1  | 
    # ... 

Tôi biết điều này là xấu. Sử dụng id làm cho toàn bộ điều giòn và khó hiểu từ sự thuận lợi của người miền.

Vì vậy, câu hỏi của tôi là - thực hành tốt nhất để thiết lập mối liên kết với factory_girl và đối số bảng như thế nào ở trên?

Trả lời

0

Chỉ cần trả lời câu hỏi của riêng tôi: Pickle

3

Bạn có thể xác định nhiều liên kết trong một nhà máy.
Giống như sau:

Factory.define :item do |item| 
    item.name   "item_name" 
end 

Factory.define :group do |group| 
    group.name   "group_name" 
    group.items   { |items| [ items.association(:item), items.association(:item) ] } 
end 

Làm một Factory(:group) sẽ tạo uplet nhóm của bạn với hai mặt hàng trong đó.

+1

Bí quyết ở đây là group.items sẽ trả về một mảng. Phải mất một lúc tôi mới làm được điều đó. – jonnii

+0

Vâng, điều đó không dễ hiểu (nhưng nhìn thấy nó hoạt động như thế nào, nó hợp lý) –

+0

Có bạn. Nhưng có cách nào để bọc một bước dưa chuột với một tham số bảng (như một trong bài viết của tôi) xung quanh một nhà máy như vậy? Có lẽ, tôi chỉ nên thực hiện một cách tiếp cận thực tế và tiết tấu và cụ thể trong bước ("Tôi có hai mục, foo và bar, thuộc về một nhóm được gọi là foo") thay vì làm phiền với các bảng, giống như một mô hình chống lại tôi? –

0

Bạn có thể sử dụng các bước Dưa chuột FactoryGirl định nghĩa:
https://github.com/thoughtbot/factory_girl/blob/master/lib/factory_girl/step_definitions.rb

Bạn có thể thiết lập các mục của bạn và nhóm của bạn (s) trong bước chỉ là một Dưa chuột:

Given the following items exists: 
    | Name  | Group  | 
    | Foo  | Name: Bar | 
    | Foam  | Name: Bar | 
    | Food  | Name: Bar | 

Khi thực hiện việc này, việc tạo nhóm 'Bar' đang sử dụng chức năng 'find_or_create_by', do đó cuộc gọi đầu tiên sẽ tạo nhóm, 2 cuộc gọi tìm nhóm đã tạo.

Bằng cách này, tất cả 3 mục sẽ có cùng một nhóm 'Bar' và bạn có thể tạo bao nhiêu mục được nhóm khi cần.

+0

Các bước FactoryGirl dưa chuột không được dùng bởi ThoughtBot ủng hộ viết kịch bản tốt hơn. Xem bài đăng trên blog của họ: http://robots.thoughtbot.com/post/25650434584/writing-better-cucumber-scenarios-or-why-were – MikeH

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