2011-09-25 33 views
15

Tôi đang cố gắng viết các bài kiểm tra đơn vị cho các phần của ứng dụng Node của tôi. Tôi đang sử dụng Mongoose cho ORM của tôi.Thử nghiệm Mongoose Node.JS ứng dụng

Tôi đã tìm kiếm một nhóm để thử nghiệm với Mongoose và Nút nhưng không đi kèm với bất kỳ thứ gì. Các giải pháp/khuôn khổ tất cả dường như được xếp chồng đầy đủ hoặc không đề cập đến công cụ nhại.

Có cách nào tôi có thể giả lập Mongoose DB của mình để tôi có thể trả về dữ liệu tĩnh trong các thử nghiệm của mình không? Tôi không muốn phải thiết lập một DB thử nghiệm và điền nó với dữ liệu cho mỗi bài kiểm tra đơn vị.

Có ai khác đã gặp phải điều này không?

Trả lời

6

Tôi đã giải quyết vấn đề này bằng cách cấu trúc mã của tôi một chút. Tôi đang giữ tất cả các thứ liên quan đến mongoose của mình trong các lớp riêng biệt với các API như "lưu", "tìm", "xóa" và không có lớp nào khác truy cập trực tiếp vào cơ sở dữ liệu. Sau đó, tôi chỉ đơn giản là thử những người trong các bài kiểm tra dựa trên dữ liệu.

Tôi đã làm điều gì đó tương tự với các đối tượng thực tế được trả lại. Đối với mỗi mô hình tôi có trong mongoose, tôi có một lớp tương ứng kết thúc tốt đẹp nó và cung cấp các phương thức truy cập đến các trường. Chúng cũng dễ bị chế nhạo.

+11

bạn có ví dụ về mã này không? – bouncingHippo

8

Tôi cũng đã tìm kiếm câu trả lời và kết thúc ở đây. Đây là những gì tôi đã làm:

Tôi bắt đầu sử dụng mockery để mô phỏng mô-đun mà mô hình của tôi đã nhập. Sau đó tạo mô-đun giả của riêng tôi với mỗi mô hình treo nó làm tài sản. Các thuộc tính này bao bọc các mô hình thực (để các thuộc tính con tồn tại cho mã đang được kiểm thử). Và sau đó tôi ghi đè lên các phương pháp mà tôi muốn thao tác cho thử nghiệm như lưu. Điều này có lợi thế là chế nhạo có thể hoàn tác việc chế nhạo.

nhưng ...

Tôi không thực sự quan tâm đến việc hoàn tác việc mô phỏng để viết thuộc tính trình bao bọc cho mọi mô hình. Vì vậy, bây giờ tôi chỉ cần mô-đun của tôi và ghi đè lên các chức năng tôi muốn thao tác. Tôi có thể sẽ chạy thử nghiệm trong các quá trình riêng biệt nếu nó trở thành một vấn đề.

Trong sắp xếp một phần của thử nghiệm của tôi:

// mock out database saves 
var db = require("../../schema"); 
db.Model1.prototype.save = function(callback) { 
    console.log("in the mock"); 
    callback(); 
}; 
db.Model2.prototype.save = function(callback) { 
    console.log("in the mock"); 
    callback("mock staged an error for testing purposes"); 
}; 
+0

bạn đã làm điều này với NodeJS chưa? – bouncingHippo

+0

có gì trong 'schema.js'? – Michelle

+0

@Michelle có lẽ là định nghĩa lược đồ Mongoose nhất – sshow

6

Cũng đáng nói:
mockgoose - DB Trong bộ nhớ mà chế giễu Mongoose, cho mục đích thử nghiệm.
monckoose - Tương tự, nhưng có cách tiếp cận khác (Thực hiện trình điều khiển giả). Monckoose dường như chưa được xuất bản kể từ tháng 3 năm 2015.

+0

Liên kết thứ hai của bạn đã chết, dường như đã bị hủy xuất bản. –

+0

@KevinB cảm ơn, đã cập nhật –

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