在使用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);
});
现在我很好奇,当测试依赖于承诺的结果时,如何使该套件特别起作用。我想它与范围有关,但无法弄清楚我要去哪里。感谢您的帮助
答案 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() callback
(docs),而不使用Promise
。
PS
看来,Mocha确实仅在describe的套件功能内寻找测试。因此,它不会等待您的数据获取异步回调对其进行调查。
我在这里找到了a similar question。