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

ada*_*810 8 mocha.js node.js

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

我试过抛出错误,但那些并没有停止整个测试,因为它是异步运行的.

Lou*_*uis 9

你正在谈论的那种"测试" - 即检查环境是否为测试套件正确设置 - 应该在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", ...
});
Run Code Online (Sandbox Code Playgroud)

如果有一些压倒一切的原因导致您无法使用钩子创建测试环境,而您必须执行检查,您可以这样做:

describe("suite", function () {
    before(function () {
        if (production_environment)
            throw new Error("production environment! Aborting!");
    });

    it("blah", ...
});
Run Code Online (Sandbox Code Playgroud)

before钩子中的失败将阻止执行任何给定的回调it.最多,Mocha将执行after挂钩(如果您指定一个)以在失败后执行清理.

请注意,before钩子是否异步并不重要.(您的测试是否异步也无关紧要.)如果您正确编写它(并done在完成后调用,如果它是异步的),Mocha将检测到钩子中发生错误并且不会执行测试.

这摩卡继续测试你有一个失败的事后测试(在回调it)是不依赖于测试是否是异步的.摩卡不会将测试失败解释为停止整个套件的理由.即使先前的测试失败,它也会继续尝试执行测试.(正如我上面所说,钩子失败是另一回事.)


Jay*_*ake 7

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

前任:

mocha **/*.spec.js --exit
Run Code Online (Sandbox Code Playgroud)


Jes*_*ris 5

我通常同意Glen,但由于你有一个不错的用例,你应该能够触发节点退出process.exit()命令.请参见http://nodejs.org/api/process.html#process_process_exit_code.您可以像这样使用它:

process.exit(1);
Run Code Online (Sandbox Code Playgroud)

  • 它也不起作用。如果放在“describe”之间,它会阻止测试完全运行,如果放在“it”内,则根本不会退出 (2认同)