Mocha无法找到我动态生成的测试?

时间:2019-01-30 10:14:36

标签: javascript node.js mocha

在使用for循环生成测试时,将在框架中检测动态测试。但是对于一个特定的套件,我需要从数据库中获取数据并基于该套件创建测试。我正在使用的程序如下

 describe("Testing existence of elements", function (existence_suite_done) {

    let elements = [];
    models.cypher('match (a:page {id: "74ab8f9d-e24b-41d1-9390-d6fb338ece38"})-[r:child]->(b:element) return b;')
      .then((data) => {
        elements = data.records;
      })
      .then(() => {
        for(var i=0;i<elements.length;i++) {
          it('hello', (done) => {
            done();
          });
        }
      })
      .then(existence_suite_done)
      .catch(existence_suite_done);
  });

现在我很好奇,当测试依赖于承诺的结果时,如何使该套件特别起作用。我想它与范围有关,但无法弄清楚我要去哪里。感谢您的帮助

1 个答案:

答案 0 :(得分:0)

这应该有效。

// Your async data fetching emulation.
var models = {
    cypher: () => {
        return new Promise((resolve, reject) => {
            setTimeout(function () {
                resolve({ records: ['A', 'B', 'C', 'D', 'E'] });
            }, 300);
        });
    }
};


// The data query is inverted with respect to the loop.
describe("Testing existence of elements", function () {
    let elements;

    it('Fething and testing data', () => {
        return models.cypher()
            .then((data) => {
                elements = data.records;
            })
            .then(() => {
                for (var i = 0; i < elements.length; i++) {
                    var el = elements[i];
                    console.log(`Testing ${el} ...`);
                }
            });
    });
});

或者,您可以返回done() callbackdocs),而不使用Promise

PS

看来,Mocha确实仅在describe的套件功能内寻找测试。因此,它不会等待您的数据获取异步回调对其进行调查。

我在这里找到了a similar question