Javascript 为什么程序停止执行-我捕获了异常?

Javascript 为什么程序停止执行-我捕获了异常?,javascript,node.js,Javascript,Node.js,我正在写一个单元测试框架。我注意到Mocha声称可以优雅地处理测试代码中的异常,将异常映射到日志输出中的正确测试。我也在尝试做同样的事情。让我们暂时忽略将异常映射到正确的测试。不过,我会接受一个建议,我现在还不知道该怎么做 我将所有测试函数添加到testmap中,迭代testmap中的键,并逐个调用每个测试的函数。我暂停,直到测试报告完成。我用try-catch块来捕获任何测试中发生的异常。它可以工作-我可以捕获测试中生成的异常,但即使捕获到它们,程序也会终止。我不想让程序终止,如果你发现异常,

我正在写一个单元测试框架。我注意到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);
    }

};
下面是生成异常的客户机代码-它是enoint-没有这样的文件或目录-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块之后终止。我想我会在test'started'中有一个额外的var,然后重新启动this.runtests,它现在会在尝试启动测试之前检查测试是否已经启动!好极了仍然不知道如何将异常映射到正确的测试,可能是e.stack?实际上,是的,我想这应该很容易。哈哈,我想我的问题是,this.runtests是最后一个调用的方法,在从catch块继续之后,程序实际上再也没有任何东西可以输出给我了,所有的东西都应该被记录下来。程序在catch块之后终止。我想我会在test'started'中有一个额外的var,然后重新启动this.runtests,它现在会在尝试启动测试之前检查测试是否已经启动!好极了仍然不知道如何将异常映射到正确的测试,可能是e.stack?实际上,是的,我想这应该很容易。哈哈,我希望有一种方法可以真正继续执行程序——这是我思维中的错误,如果我抓住了它,程序就会继续执行。不,它跳到抓块并从那里继续!看起来我必须使用e.stack中的行号,读取客户机代码文件,搜索他们使用的actual,它总是将测试名称作为第一个参数,然后获取该字符串。巴林。我猜出来了万岁!为什么要否决我的问题?在这种情况下,答案很简单,程序几乎在退出catch块后立即终止。我没有意识到这一点。也许它会帮助别人。这不是一个重复的问题。