条件摩卡测试

时间:2014-03-04 15:33:13

标签: javascript mocha

我使用mocha进行一些集成测试并拥有许多测试集。 每组都有初始化测试。当这样的测试失败时,该组的其余部分根本不应该运行,因为如果一个失败则每个都会失败。 问题是我无法避免这种初始化测试,因为部分代码/环境是由某些工具生成的,不保证任何正确的结果。

是否可以使用mocha实现这一点?

2 个答案:

答案 0 :(得分:2)

使用BDD界面,使用Mocha执行此操作的常规方法是将设置测试环境的任何内容放入beforebeforeEach

describe("foo", function () {
    describe("first", function () {
        before(function () {
            // Stuff to be performed before all tests in the current `describe`.
        });

        beforeEach(function () {
            // Stuff to perform once per test, before the test.
        });

        it("blah", ...
        // etc...
    });

    describe("second", function () {
        before(function () {
            // Stuff to be performed before all tests in the current `describe`.
        });

        beforeEach(function () {
            // Stuff to perform once per test, before the test.
        });

        it("blah", ...
        // etc...
    });
});

如果测试所依赖的beforebeforeEach失败,则不会运行测试。其他不依赖于它的测试仍然会运行。因此,在上面的示例中,如果传递给名为before的{​​{1}}中的describe的回调失败,则名为first的{​​{1}}中的测试不会受到影响只要他们自己的describesecond回调没有失败,就会运行。

除此之外,Mocha旨在运行彼此独立的测试。因此,如果一个before失败,那么其他人仍然会运行。

答案 1 :(得分:1)

我发现mocha-steps基本上允许你写一个it() s的“链”(称为step()),如果其中一个断开,mocha会中止该套件,从而避免了不可避免的失败的级联,我发现pull request 8标记后续步骤和子套素为待定。所以我可以写:

describe("businessCode()", function() {
  step("should be not null", function() {
    assert(businessCode() != null)
  });
  step("should be a number", function() {
    assert(typeof businessCode() === 'number');
  });
  step("should be greater than 10", function() {
    assert(businessCode() > 10);
  });
  describe("thingThatCallsBusinessCode()", function() {
    step("should be greater than 10", function() {
      assert(thingThatCallsBusinessCode() != null);
    });
  });
});

如果是businessCode()返回一个布尔值,只有should be a number测试失败;随后的(并且子套件将被标记为待定)。