首页 > 解决方案 > Mocha 前执行后 It 阻塞

问题描述

我正在尝试使用 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 方法返回一个 Promise。before 块不等待完成。2000 毫秒后,只有 before 块完成。所以我的测试用例失败了。摩卡版本是5.2.0

测试用例

在此处输入图像描述

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

标签: javascriptnode.jsunit-testingmocha.js

解决方案


Mocha 理解 Promise,因此您应该能够返回由以下生成的 Promise 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)

        })
    }
}

推荐阅读