我正在编写一个单元测试框架。我注意到Mocha声称要优雅地处理测试代码中的异常,将异常映射到日志输出中的正确测试。我试图在这里做同样的事情。让我们暂时忽略将异常映射到正确的测试(虽然我会采取一个建议,我现在对我将如何做到这一点感到难过)
我将所有测试函数添加到testmap中,迭代testmap中的键,然后逐个调用每个测试函数。我停下来,直到测试报告完成。我将这个try-catch块包装起来,以捕获任何测试中发生的任何异常。它工作 - 我可以捕获测试中生成的异常,但即使我抓住它们,程序也会终止。我不希望程序终止,我认为如果你抓住异常就不应该......是什么给出了?
这是我的库代码中的try-catch
this.runtests = () => {
try {
Object.keys(this.testmap).forEach((test) => {
performance.mark(test)
this.testmap[test].testfunc();
});
this.stalltillgood(() => {
this.finallog();
});
}
catch (e) {
console.log('UNHANDLED EXCEPTION IN TEST');
console.log(e.stack);
}
};
这是生成异常的客户端代码 - 它是ENOENT - 没有这样的文件或目录 - hello.htm不存在(故意)
expected('<fuck>&<fuck>');
testinfo('A Hello World Test', //the name of the test [MUST PASS TO ACTUAL AS WELL]
'This is the hello world test doc lol'); //the doc
comparator(cmp.equals); //you can use the pre built compare functions or your own
test(() => { //pass your test function to test
const file = fs.readFileSync('./hello.htm');
actual('A Hello World Test', file.toString());//make a call to actual in your test code
}); //to pass it your test result
//write more tests with the same sequence of commands
我认为我的问题是this.runtests是最后一个调用的方法,在继续从我的catch块继续之后,该程序从来没有任何东西可以再次输出给我,所有内容都应该记录下来。该程序在catch块之后终止。我想我将在测试'启动'中有一个额外的var并重新启动this.runtests,现在将检查测试是否已经开始尝试启动它!万岁!还是不知道如何将异常映射到正确的测试,也许是e.stack?实际上是的,这应该很容易,我想大声笑。
答案 0 :(得分:0)
我认为我的问题是this.runtests是最后一个调用的方法,在继续从我的catch块继续之后,该程序从来没有任何东西可以再次输出给我,所有内容都应该记录下来。该程序在catch块之后终止。我想我将有一个额外的变量测试&#39;开始&#39;然后重新启动this.runtests,现在将在尝试启动之前检查测试是否已经开始!万岁!还是不知道如何将异常映射到正确的测试,也许是e.stack?实际上是的,这应该很容易,我想大声笑。