2011-03-03 37 views
57

Mục đích của Factory Girl trong các thử nghiệm rspec khi tôi có thể sử dụng các khối before(:each) là gì? Có vẻ như sự khác biệt duy nhất giữa Factory Girl và before(:each) là nhà máy chuẩn bị tạo đối tượng bên ngoài thử nghiệm. Thê nay đung không?Factory Girl - mục đích là gì?

+0

Đây là cách tương tác với FactoryGirl ActiveReccord https://cbabhusal.wordpress.com/2015/04/21/ruby-on-rails-factory -girl-how-it-tương tác-với-activerecord/ – illusionist

Trả lời

59

Đá quý như Factory GirlSham cho phép bạn tạo mẫu cho các đối tượng hợp lệ và có thể sử dụng lại. Chúng được tạo ra để đáp ứng các đồ đạc mà ở đó các bản ghi cố định phải được nạp vào cơ sở dữ liệu. Chúng cho phép tùy biến nhiều hơn khi bạn khởi tạo các đối tượng và chúng nhằm mục đích đảm bảo rằng bạn có một đối tượng hợp lệ để làm việc. Chúng có thể được sử dụng bất cứ nơi nào trong các thử nghiệm của bạn và trong các móc thử trước và sau của bạn.

trước (: mỗi), trước (: tất cả), sau (: mỗi) và sau (: tất cả) tất cả nhằm cung cấp cho bạn một nơi để thiết lập và rách sẽ được chia sẻ giữa một nhóm thử nghiệm. Ví dụ, nếu bạn định tạo một người dùng hợp lệ mới cho mỗi lần thử nghiệm, thì bạn sẽ muốn làm điều đó trong hook trước (: each) của bạn. Nếu bạn định xóa một số tệp ra khỏi hệ thống tệp, bạn muốn thực hiện điều đó trong một hook trước đó. Nếu tất cả các thử nghiệm của bạn tạo ra một tệp tmp và bạn muốn loại bỏ nó sau khi thử nghiệm của bạn, bạn sẽ làm điều đó trong móc sau (: each) hoặc sau (: tất cả) của bạn.

Cách mà hai khái niệm này khác nhau là các Nhà máy không nhằm tạo ra các móc xung quanh các thử nghiệm của bạn, chúng nhằm mục đích tạo các đối tượng và bản ghi Ruby hợp lệ để bạn có thể giữ cho đối tượng của bạn linh hoạt và KHÔ. Trước và sau khi móc là nhằm mục đích thiết lập và teardown nhiệm vụ được chia sẻ trong một nhóm ví dụ để bạn có thể giữ thiết lập của bạn và teardown mã DRY.

+7

Một cách khác để nói điều này: một nhà máy FactoryGirl giống như một hàm 'give_me_a_valid_model'. Nếu bạn sẽ cần nó trong nhiều hơn một 'trước: mỗi khối', nó giúp bạn tiết kiệm một số sự lặp lại. Việc phức tạp hơn là thiết lập mô hình hợp lệ (các liên kết, đảm bảo các giá trị duy nhất, v.v.), nỗ lực đó càng tiết kiệm cho bạn. –

17

FactoryGirl thay thế đồ đạc trong thử nghiệm. Bằng cách này, bạn sẽ không phải giữ các đồ đạc được cập nhật khi bạn thay đổi mô hình dữ liệu. Đồ đạc cũng có thể có xu hướng khó sử dụng khi bạn thêm các trường hợp cạnh khác.

FactoryGirl tạo dữ liệu khi đang di chuyển và việc thêm và xóa trường dễ dàng hơn nhiều. Ngoài ra, bạn có thể sử dụng nó trong thiết lập như thế nào bạn muốn sử dụng đồ đạc.

Điều đó có làm cho nó rõ ràng hơn không?

+2

Mất một thời gian để tìm ra rằng các nhà máy là một sự thay thế "thông minh" cho đồ đạc. Tôi vẫn quan tâm để tìm hiểu thêm về sự khác biệt giữa mocks và stubs, quá. – Docunext

+0

Chắc chắn, cảm ơn bạn. :) Tốt để biết rằng họ là một sự thay thế tốt cho đồ đạc. Đó là một chút kỳ lạ bởi vì các hướng dẫn Hartl (được tốt, btw) đi vào và ra giữa đồ đạc và nhà máy cô gái. Tôi thấy mình bối rối. Bây giờ tôi biết, tôi có thể sử dụng nó thường xuyên hơn. :) – curiousdork

6

định nghĩa lịch thi đấu là toàn cầu trên toàn bộ ứng dụng của bạn. Các nhà máy có thể là cục bộ - vì vậy dữ liệu cụ thể cho một trường hợp thử nghiệm riêng biệt nằm trong thiết lập cho bối cảnh cụ thể đó và không phải trong một tệp đồ đạc toàn cầu duy nhất.

This book bao gồm các chủ đề rất tốt nếu bạn muốn có một số đọc nhiều vấn đề

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