Mặc định Mocha đang sử dụng Khẳng định từ node.js (https://nodejs.org/api/assert.html). Bạn không cần bất kỳ thư viện bên ngoài nào để kiểm tra xem một phương thức có phát sinh lỗi hay không.
Khẳng định có một phương pháp - assert.throws
, nó có ba thông số, nhưng chỉ có hai vấn đề thực sự ở đây:
- chức năng - đây vượt qua chức năng, không hoạt động gọi
- lỗi - đây vượt qua hoặc constructor đối tượng hoặc chức năng để kiểm tra lỗi
Hãy tưởng tượng rằng bạn có một hàm gọi là sendMessage(message)
sẽ phát sinh lỗi khi thông số thư không được đặt. Mã hàm:
function sendMessage(message) {
if (!message || typeof message !== 'string') {
throw new Error('Wrong message');
}
// rest of function
}
Ok, vì vậy để kiểm tra, bạn cần thêm chức năng để bao gồm đầu vào. Tại sao? Vì assert.throws
không cung cấp bất kỳ cơ hội nào để truyền tham số cho hàm sẽ được kiểm tra.
Vì vậy, thay vì
// WRONG
assert.throws(sendMessage, Error); // THIS IS WRONG! NO POSSIBILITY TO PASS ANYTHING
bạn cần để tạo ra chức năng ẩn danh:
// CORRECT
assert.throws(() => {
sendMessage(12); // usage of wanted function with test parameters
}, Error)
Bạn có thể thấy sự khác biệt? Thay vì truyền hàm trực tiếp, tôi đã đặt hàm gọi bên trong hàm ẩn danh, với mục đích gọi nó bằng đầu vào được chuẩn bị.
Còn về tham số thứ hai. Nó phụ thuộc vào loại lỗi nên được ném, trong ví dụ trên Error
đối tượng đã được ném, vì vậy tôi đã phải đặt có Error
. Kết quả của hành động này, assert.throws
so sánh nếu đối tượng được ném là đối tượng cùng loại. Nếu thay vì Error
thứ gì đó khác sẽ được ném, thì phần này cần được thay đổi. Ví dụ: thay vì Error
Tôi sẽ ném một giá trị loại String
.
function sendMessage(message) {
if (!message || typeof message !== 'string') {
throw 'Wrong message'; // change to String
}
// rest of function
}
Bây giờ cuộc gọi thử nghiệm
assert.throws(() => {
sendMessage(12); // usage of wanted function with test parameters
}, (err) => err === 'Wrong message')
Thay vì Error
trong tham số thứ hai tôi đã sử dụng chức năng so sánh để so sánh lỗi ném với sự mong đợi.
"lực lượng mocha thử nghiệm để thất bại "âm thanh như bạn muốn' mong đợi (false) .to.be.true', nhưng những gì thực sự được thảo luận là thử nghiệm thất bại dự kiến, tôi đã yêu cầu chỉnh sửa tiêu đề cho phù hợp. – OJFord