如何在先前的异步测试通过后才运行mocha测试?

时间:2013-11-27 14:14:10

标签: javascript testing mocha

使用mocha javascript测试框架,我希望能够在先前定义的测试通过后执行多个测试(所有异步)。

我不想将这些测试嵌套在彼此中。

describe("BBController", function() {
    it("should save", function(done) {});
    it("should delete", function(done) {});
})

2 个答案:

答案 0 :(得分:4)

使用--bail选项。确保你至少使用摩卡0.14.0。 (我已经尝试使用旧版本而没有成功。)

首先,只有在前一个测试完成后,才能让mocha运行测试。这就是mocha默认工作的方式。将其保存到test.js

describe("test", function () {
    this.timeout(5 * 1000); // Tests time out in 5 seconds.

    it("first", function (done) {
        console.log("first: do nothing");
        done();
    });

    it("second", function (done) {
        console.log("second is executing");
        // This test will take 2.5 seconds.
        setTimeout(function () {
            done();
        }, 2.5 * 1000);
    });

    it("third", function (done) {
        console.log("third is executing");
        // This test will time out.
    });

    it("fourth", function (done) {
        console.log("fourth: do nothing");
        done();
    });
});

然后执行:

mocha -R spec test.js

在下列情况之前,你不会看到第四次测试开始:

  1. 第一次和第二次测试结束。
  2. 第三次测试已经超时。
  3. 现在,运行:

    mocha -R spec --bail test.js
    
    一旦测试3失败,Mocha就会停止。

答案 1 :(得分:-5)

如果您的测试设置正确,只测试一小块业务逻辑,那么您可以异步运行测试,但不应该进行其他测试。要完成测试的方法是执行以下操作:

describe("BBController", function() {
    it("should save", function(done) {
       // handle logic
       // handle assertion or other test
       done(); //let mocha know test is complete - results are added to test list
    });
    it("should delete", function(done) {
       // handle logic
       // handle assertion or other test
       done(); //let mocha know test is complete - results are added to test list
    });
});

再一次,没有测试需要等待另一个测试运行才能通过,如果你遇到这个问题,那么你应该考虑一些方法来推动你的依赖注入或用before方法准备你的测试