如何在不继续进行下一次测试的情况下强制完成Mochajs测试。如果环境意外设置为生产环境,我可能会阻止任何进一步的测试,我需要阻止测试继续进行。
我尝试过抛出错误,但这些错误并没有因为它是异步运行而停止整个测试。
答案 0 :(得分:8)
"测试"你正在谈论---即检查环境是否为测试套件正确设置 - 应该在before
钩子中完成。 (或者可能在beforeEach
钩子中,但before
似乎更适合做你所描述的。)
但是,最好使用此before
挂钩设置隔离环境以运行测试套件。它采取以下形式:
describe("suite", function () {
before(function () {
// Set the environment for testing here.
// e.g. Connect to a test database, etc.
});
it("blah", ...
});
如果有一些压倒一切的原因导致您无法使用挂钩创建测试环境,而必须执行检查,您可以这样做:
describe("suite", function () {
before(function () {
if (production_environment)
throw new Error("production environment! Aborting!");
});
it("blah", ...
});
before
挂钩失败将阻止执行给it
的任何回调。最多,Mocha将执行after
挂钩(如果您指定一个)以在失败后执行清理。
请注意,before
挂钩是否异步无关紧要。 (你的测试是否是异步的也不重要。)如果你写得正确(并在完成时调用done
,如果它是异步的话),Mocha将检测到钩子中发生错误并赢得了#39 ; t执行测试。
Mocha在测试失败后(在it
的回调中)继续测试的事实并不取决于测试是否是异步的。 Mocha不会将 test 的失败解释为停止整个套件的原因。即使先前的测试失败,它也会继续尝试执行测试。 (正如我上面所说, hook 中的失败是另一回事。)
答案 1 :(得分:6)
我通常同意Glen,但由于你有一个不错的用例,你应该能够触发节点以process.exit()
命令退出。见http://nodejs.org/api/process.html#process_process_exit_code。您可以像这样使用它:
process.exit(1);
答案 2 :(得分:1)