Tôi đang cố gắng tạo một bộ thử nghiệm cho một mô-đun mà tôi đang viết trong Node.js bằng Nodeunit. Mô-đun là danh sách phát nhạc cơ bản cho phép thêm và xóa các bản nhạc vào danh sách phát.Nodeunit test.throws dường như không gặp lỗi
var playlist = function(){
this.__playlist = [];
this.__count = 0;
};
playlist.prototype = {
addtrack:function(track){
if(typeof track !== "object") throw new Error("Track needs to be an oject");
this.__count++;
track.id = this.__count;
this.__playlist.push(track);
return this.__playlist;
},
removetrack:function(trackid){
if(typeof trackid !== "number") throw new Error("Pass in a numeric track id");
var trackFound = false;
for(var i=0;i<this.__playlist.length;i++){
var t = this.__playlist[i];
if(t.id == trackid){
trackFound = true;
this.__playlist.splice(i,1);
}
}
if(!trackFound) throw new Error("Track not found in the playlist");
return this.__playlist
}
}
exports.playlist = function(){
return new playlist();
}
Như bạn có thể thấy có những nơi mà ném lỗi dựa trên dữ liệu không chính xác được thông qua tại.
Vì vậy, đây là bộ kiểm tra của tôi.
var pl = require('./playlist');
exports.testPlaylistInit = function(test){
var playlist = pl.playlist();
test.equal(typeof playlist, 'object');
test.done();
}
exports.testAddingTracks = function(test){
var playlist = pl.playlist();
test.throws(playlist.addtrack(), Error, 'Should fail for blank track');
var track = {
title: "Golly Sandra",
artist: "Eisley",
album: "Room Noises"
};
tracks = playlist.addtrack(track);
test.equals(tracks[0],track);
test.equals(tracks[0].id,1)
test.done();
}
exports.testRemoveingTracks = function(test){
var playlist = pl.playlist();
test.throws(playlist.removetrack('Imma error'), Error, 'Show fail for non-numeric track id');
var track = {
title: "Golly Sandra",
artist: "Eisley",
album: "Room Noises"
};
playlist.addtrack(track);
track = {
title: ".44 Calliber Love Letter",
artist: "Alexisonfire",
album: "Alexisonfire"
}
playlist.addtrack(track);
test.equals(playlist.removetrack(1)[0],track);
test.throws(playlist.removetrack(10), Error, 'Should fail for non-existant track');
test.done();
}
Trong khi viết bộ kiểm tra tôi đã sử dụng test.throws như giả thiết về cơ bản chỉ kết thúc tốt đẹp các khối mã trong một tuyên bố try-catch và kiểm tra đánh bắt so với khối lỗi. Rõ ràng tôi là sai mặc dù, bởi vì khi tôi chạy thử nghiệm với Nodeunit, Node hiển thị thông báo lỗi được ném bởi các mô-đun thay vì bộ thử nghiệm bắt lỗi. Tôi có đang sử dụng trường hợp test.throw không chính xác không?
hoàn hảo, vàng .... có lẽ ví dụ tương tự sẽ được thêm vào readme cho nodeunit;) –