Node.js 节点中的Mongodb测试
我一直在Node中使用Mocha进行测试,因为它似乎是大多数人使用的。我还使用MongoDB来存储数据,因为我的服务器是一个简单的API服务器,所以我的所有方法都只是简单的数据库查询,我正试图用Mocha进行测试。 现在我面临的问题是(除了测试异步函数似乎很困难之外),我似乎找不到合适的方法来测试mongoDB ExceptionNode.js 节点中的Mongodb测试,node.js,mongodb,mocha.js,Node.js,Mongodb,Mocha.js,我一直在Node中使用Mocha进行测试,因为它似乎是大多数人使用的。我还使用MongoDB来存储数据,因为我的服务器是一个简单的API服务器,所以我的所有方法都只是简单的数据库查询,我正试图用Mocha进行测试。 现在我面临的问题是(除了测试异步函数似乎很困难之外),我似乎找不到合适的方法来测试mongoDB Exception it('Should not create account', async (done) => { try { await createAcc
it('Should not create account', async (done) => {
try {
await createAccountDB(user);
await createAccountDB(user);
} catch (err) {
assert.notEqual(err, null);
console.log(err);
}
finally {
done();
}
});
});
我在这里尝试的是为用户创建一个帐户(基本上只是将对象保存到数据库中),然后再次创建相同的帐户,这将导致重复的密钥错误
现在,这不起作用,据我所知,这是因为我已经定义了async和done。我这样做的原因是,如果我不定义async,我将需要一大堆.then和.catch,这会使代码看起来很糟糕,但是如果我不在finally块中包含then done(),我的测试似乎永远都不会到达catch块
有没有办法在Mocha中编写这样的测试,而不会让代码看起来非常糟糕?既然您已经在使用
async/await
模型,那么测试用例不一定需要done
回调。当您有多个指示测试完成的方法时,mocha的某些版本会向您发出警告。试试这个:
it('should not create an account', async function() {
try {
await createAccountDB(user);
await createAccountDB(user);
throw new Error('Did not reject a duplicate account');
} catch (err) {
assert.notEqual(err, null);
// any other assertions here
}
});
在
try/catch
块中抛出的错误非常重要-如果没有它,即使没有抛出错误,测试仍然会通过。非常感谢,这实际上修复了它,没有考虑在try块中抛出错误,非常聪明!