摩卡在它块之后执行之前

时间:2018-07-16 15:52:30

标签: javascript node.js unit-testing mocha

我正在尝试使用mocha和chai对node.js进行单元测试。

index.js

module.exports = {
    setA: function () {
        return new Promise(function () {
            setTimeout(function () {
                console.log("aaaa");
                a = 1;
            }, 2000)

        })
    }
}

index.spec.js

var assert = require("assert");
var SetA = require("./index")
a = 0;
before(function() {
  SetA.setA();

});
it('a should be set to 1', function() {
  assert(a === 1);
});
从index.js文件中的SetA方法返回一个承诺。在块不等待完成之前。在2000毫秒之后,只有before块才完成。所以我的测试用例失败了。 Mocha版本为 5.2.0

测试用例

enter image description here

如何使before块同步,以便仅在完成执行后才将其移动到It块?

1 个答案:

答案 0 :(得分:3)

摩卡(Mocha)理解诺言,因此您应该能够只返回SetA生成的诺言:

before(function() {
  return SetA.setA(); 
});

还要查看您的功能SetA -您永远都不会兑现承诺。您将需要以下内容:

module.exports = {
    setA: function () {
        return new Promise(function (resolve) { //<< resolve
            setTimeout(function () {
                console.log("aaaa");
                a = 1;
                resolve() //<< call resolve when you're done
            }, 2000)

        })
    }
}