Nodeunit을 사용하여 Node.js에 쓰고있는 모듈에 대한 테스트 슈트를 만들려고합니다. 이 모듈은 재생 목록에 트랙을 추가하고 제거 할 수있는 기본 음악 재생 목록입니다.Nodeunit test.throws가 오류를 catch하지 않는 것 같습니다
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();
}
당신이. 그래서 여기
내 테스트 스위트가 전달되는 부정확 한 데이터를 기반으로 오류를 발생 장소가 볼 수 있듯이. 테스트 스위트를 작성하는 동안 가정은 기본적으로 그냥 시도-catch 문에서 코드 블록을 래핑하고 오류 블록에 대한 캐치를 검사로
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();
}
나는 test.throws을 사용했다. 분명히 Nodeunit으로 테스트를 실행할 때 노드가 오류를 포착하는 테스트 슈트 대신 모듈에 의해 던져진 오류 메시지를 표시하기 때문에 분명히 틀 렸습니다. test.throw 케이스를 잘못 사용하고 있습니까?
완벽한, 황금 .... 비슷한 예제가 nodeunit에 대한 readme에 추가되어야합니다;) –