2012-09-12 13 views
13

Sự khác biệt giữa stub_modelmock_model trong RSpec là gì? Cho đến nay, tôi biết rằng stubs được sử dụng để ngăn chặn các phương pháp thực sự được gọi và trả về một giá trị được xác định trước, và mocks thực sự mong đợi và yêu cầu phương thức được gọi trên người nhận.Sự khác nhau giữa stub_model và mock_model trong RSpec là gì?

Tôi cũng biết rằng các cuống/mocks này được sử dụng để cho phép kiểm tra riêng biệt, chẳng hạn như trong bộ điều khiển mà không cần chạm vào mô hình. Nhưng tôi vẫn còn nhầm lẫn với hai phương pháp, khi chính xác từng được sử dụng? Chi tiết và ví dụ sẽ được đánh giá rất nhiều. Cảm ơn rất nhiều!

+0

Không chắc nếu điều này áp dụng cho câu hỏi của bạn nhưng có một điều hữu ích đối với tôi là nhận ra rspec rằng "chế giễu" là để tạo đối tượng giả trong khi "khai" là để tạo phương pháp giả . Lưu ý rằng tôi không nói về 'stub_model' hoặc' mock_model' nhưng các thuật ngữ chung và giả lập hơn. – Dty

Trả lời

11

stub_model

Phương pháp stub_model tạo ra một thể hiện của một mô hình mẫu tích cực.

Trong khi bạn có thể sử dụng stub_model trong bất kỳ ví dụ nào (mô hình, chế độ xem, bộ điều khiển, trợ giúp), nó đặc biệt hữu ích trong các ví dụ xem, vốn vốn dựa nhiều hơn dựa trên tương tác.

mock_model

Phương pháp mock_model tạo ra một kiểm tra đôi mà hành động như một Active Mẫu mô hình. Điều này khác với phương thức stub_model tạo ra một cá thể của một lớp ActiveModel thực.

Lợi ích của mock_model trên stub_model là số thực của nó là gấp đôi, vì vậy các ví dụ không phụ thuộc vào hành vi (hoặc hành vi sai), hoặc thậm chí sự tồn tại của bất kỳ mã nào khác. Nếu bạn đang làm việc trên một bộ điều khiển spec và bạn cần một mô hình không tồn tại, bạn có thể vượt qua mock_model một chuỗi và đối tượng được tạo sẽ hoạt động như thể một thể hiện của lớp được đặt tên theo chuỗi đó.

docs rspec: stub_modelmock_model