为什么执行程序停止 - 我抓住了异常?

时间:2018-04-20 15:17:34

标签: javascript node.js

我正在编写一个单元测试框架。我注意到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?实际上是的,这应该很容易,我想大声笑。

1 个答案:

答案 0 :(得分:0)

我认为我的问题是this.runtests是最后一个调用的方法,在继续从我的catch块继续之后,该程序从来没有任何东西可以再次输出给我,所有内容都应该记录下来。该程序在catch块之后终止。我想我将有一个额外的变量测试&#39;开始&#39;然后重新启动this.runtests,现在将在尝试启动之前检查测试是否已经开始!万岁!还是不知道如何将异常映射到正确的测试,也许是e.stack?实际上是的,这应该很容易,我想大声笑。