2012-04-14 24 views
8

Mục đích của nhà máy/đồ đạc (Tôi biết các nhà máy hoạt động như đồ đạc, nhưng rõ ràng hơn một chút) khi bạn chỉ có thể sử dụng ActiveRecord trong thử nghiệm của mình để tạo mục nhập cơ sở dữ liệu? tức là News.create (...)Nhà máy/Đồ đạc so với Model.create đơn giản (...)?

Tôi chỉ không nhìn thấy bất kỳ lợi thế của việc sử dụng Factory Girl thay vì chỉ đơn giản là tạo ra một let mới nói một người dùng mới sử dụng phương pháp ActiveRecord ..

Cảm ơn

Trả lời

2

nhà máy và làm theo tấm dữ liệu thử nghiệm xây dựng mô hình sẽ làm cho bạn làm một chút công việc lên phía trước, nhưng thực sự sẽ giúp bạn tiết kiệm thời gian và công việc trong tương lai.

Giả sử bạn có Mô hình ô tô và Ô tô đó có Chủ sở hữu và Chủ sở hữu đó cần Địa chỉ. Ngoài ra mỗi người trong số đó có các lĩnh vực khác. Nếu bạn muốn thực hiện theo cách tiếp cận của việc sử dụng các Mô hình trực tiếp, bạn sẽ phải tạo các đối tượng đó (và các quan hệ tương ứng) trong mỗi định nghĩa bước yêu cầu chúng. Với nhà máy? Bạn sẽ xác định nó chỉ một lần.

Khi bạn đã xác định Nhà máy ở một nơi duy nhất với cấu trúc tương ứng, tất cả những gì bạn phải làm là yêu cầu xe và Nhà máy sẽ lấy xe của tất cả các phụ thuộc với các kiểu máy khác. Đó không phải là mát mẻ? Cuối cùng, bạn muốn tập trung vào thử nghiệm tại thời điểm này.

gì nó cũng thực sự mát mẻ là bạn có thể ghi đè lên các thuộc tính đặc biệt, vì vậy bạn có thể có ví dụ một cái gì đó như thế này, nếu bạn muốn ghi đè lên tốc độ thuộc tính:

Given /^I have a car running^/ 
Factory :car, speed => 100 
end 

Từ quan điểm khiêm tốn của tôi xem, tôi yêu Factory Girl bởi vì nó làm cho mã kiểm tra của tôi dễ dàng để duy trì và thực sự dễ đọc.

+2

Điểm cuối: Tất cả các đối số này cũng áp dụng cho đồ đạc. Đồ đạc nhanh hơn tổng thể. Có lý do nào khác không? – DGM

+0

@DGM Mặc dù tôi sử dụng và tôi thích đồ đạc, đôi khi tôi thấy chúng khó duy trì. –

2

nhà máy cho phép bạn đặt thiết lập thử nghiệm trong một tệp. Ví dụ: nhà máy dự án của tôi là spec/support/factories/project_factory.rb.

Nếu tôi muốn thay đổi tiêu đề mặc định hoặc có thể thêm thuộc tính khác, tôi làm điều đó trong một tệp. Với AR bắn tung tóe khắp mọi nơi trong suốt các thử nghiệm của tôi, tôi sẽ cần phải thay đổi điều đó trong mọi trường hợp sử dụng đó.

5

Nhà máy

Tạo/xây dựng một đối tượng và sau đó bạn chỉ sử dụng khi được gọi trong thử nghiệm.

Bạn xác định "đường dẫn hạnh phúc" của đối tượng, bao gồm các liên kết, trong một tệp (như được đề cập đến ryan) và sau đó chỉ duy trì một tệp khi các liên kết lược đồ/mô hình của bạn thay đổi.

Lịch thi đấu

Mimics những gì các cơ sở dữ liệu sẽ giống như một hồ sơ duy nhất, nó được nạp vào cơ sở dữ liệu thử nghiệm và sau đó sử dụng.

Đồ đạc là trạng thái kết thúc của mô hình và sống trong cơ sở dữ liệu, do đó được tải một lần và có thể được sử dụng trong các thử nghiệm khi bạn thấy phù hợp.

Nhiều tệp và bạn đặt ra tệp cố định để mỗi tệp và liên kết được xử lý.

NewModel.create (...)

là tạo ra một lần và sử dụng một lần trong một thử nghiệm hoặc trong một before(:each) khối

Nếu bạn có 100 của các khối, đó là viết và duy trì 100 đối tượng khác nhau, chứ chưa nói đến các hiệp hội như @user.profile.create(....) 100 lần.

Ưu điểm của nhà máy trên NewModel.create

Một tập tin để duy trì, chứ không phải là grepping và thay thế nhiều build hoặc create trong dòng code của bạn.

Note Phải nói rằng trong bộ kiểm tra của tôi, tôi muốn nó được nhanh càng tốt, vì vậy tôi đang thả FactoryGirl và sử dụng Lịch thi đấu và NewModel.create di chuyển về phía trước. Chỉ để xem nó có tăng tốc không. Tôi đang làm việc trên lý thuyết rằng FG đang làm chậm bộ phần mềm của tôi xuống, như là let()before(:each)

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