我正在使用void*
练习基本的单元测试用例,并且对使用done()处理程序的 HOW 和 When 有点困惑。
mocha
? 下面是我无法使用done()
的示例代码:
done
我跑步时失败,并引发错误-
错误:超时超过2000毫秒。对于异步测试和挂钩,请确保 称为“ done()”;如果返回了Promise,请确保它可以解决。
但是只有在失败的情况下才应调用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);
}
})
(请原谅我,如果我说的是不正确的话,我是初学者),我在done
块中做了第二点承诺的回报,效果很好。参见下面的代码
catch
但这需要附加的Promise构造代码,但这不是问题。但这提出了另一个问题
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);
}
})
});
? 使用done
编写测试用例的更好方法的任何帮助或建议都会有所帮助。
答案 0 :(得分:2)
正确的方法是不要将done
与async..await
一起使用。 Mocha支持诺言,并能够链接从it
等函数返回的诺言。 async
函数是始终返回promise的函数的语法糖:
it('Testing insertDocumentWithIndex', async () => {
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);
})
done
仅用于测试异步API,而不涉及承诺。即便如此,兑现承诺通常也会带来更清晰的控制流程。
还有这个
it('Testing insertDocumentWithIndex', async () => {
return new Promise(async (resolve, reject) => {
...
是promise构造的反模式,由于async
promise构造函数的回调,更糟。