如何在没有继续的情况下完全结束节点摩卡中的测试

时间:2014-08-27 13:06:28

标签: node.js mocha

如何在不继续进行下一次测试的情况下强制完成Mochajs测试。如果环境意外设置为生产环境,我可能会阻止任何进一步的测试,我需要阻止测试继续进行。

我尝试过抛出错误,但这些错误并没有因为它是异步运行而停止整个测试。

3 个答案:

答案 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)

mocha documentation开始,您可以在执行测试时添加--exit标志。 无论所有测试是否成功执行,它都会停止执行。

例如:

mocha **/*.spec.js --exit