Я практикую базовые юнит-тесты с mocha
и немного запутанным КАК и КОГДА для использования обработчика done () .
- Как использовать
done()
?
Ниже приведен мой пример кода, где я не могу использовать done
:
it('Testing insertDocumentWithIndex', async (done) => {
try{
var data = await db.insertDocumentWithIndex('inspections', {
"inspectorId" : 1,
"curStatus" : 1,
"lastUpdatedTS" : 1535222623216,
"entryTS" : 1535222623216,
"venueTypeId" : 1,
"location" : [
45.5891279,
-45.0446183
]
})
expect(data.result.n).to.equal(1);
expect(data.result.ok).to.equal(1);
}
catch(e){
logger.error(e);
done(e);
}
})
При запуске происходит сбой и выдается ошибка -
Ошибка: превышено время ожидания 2000 мс.Для асинхронных тестов и хуков убедитесь, что вызывается «done ()»;если вы возвращаете обещание, убедитесь, что оно разрешено.
Но done
следует вызывать только в случае сбоя (простите, если я что-то говорю неправильно, я новичок), что я и сделалв catch
блоке и приходе ко второй точке возврата Обещания, хорошо, что отлично работает.См. Ниже код
it('Testing insertDocumentWithIndex', async () => {
return new Promise(async (resolve, reject) => {
try{
var data = await db.insertDocumentWithIndex('inspections', {
"inspectorId" : 1,
"curStatus" : 1,
"lastUpdatedTS" : 1535222623216,
"entryTS" : 1535222623216,
"venueTypeId" : 1,
"location" : [
45.5891279,
-45.0446183
]
})
expect(data.result.n).to.equal(1);
expect(data.result.ok).to.equal(1);
resolve()
}
catch(e){
reject(e);
}
})
});
Но для этого требуется дополнительный код конструкции Promise, но это не проблема.Но возникает другой вопрос
КОГДА следует использовать done
? Любая помощь или предложение для лучшего подхода к написанию тестовых случаев с mocha
помогут.