Это должно работать.
// 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
, вы можете вернуть Promise
( документы ).
PS
Кажется, что Мокка ищет тесты только в пределах функции набора описания.Таким образом, он не будет ждать, пока ваши данные извлекают асинхронный обратный вызов, чтобы разобраться в этом.
Здесь я нашел аналогичный вопрос .