如何在 node.js 的 mocha 和 chai 中同时使用 should 和 done
How to use both should and done in mocha and chai with node.js
我刚开始学习 mocha 和 chai。我被困在这里
const UserService = new Service();
describe("user-services.spec", () => {
describe("Services testing", () => {
before((done) => {
db();
userModel.remove({}, done);
})
after((done) => {
mongoose.connection.close();
done();
})
it("should add user to db", () => {
let id = 4;
let name = "Alen";
(async () => {
let result = await UserService.addUser(id, name);
console.log("result", result);
result.should.have.property("_i");
//done();
})();
})
})
})
现在我有两个基于上面代码的问题
这个测试用例是不是我把"_id"改成"_i"我也不知道怎么会一直通过?
如果我想对上面的代码使用 done 并取消对 done() 的注释,那么它会给出错误
Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
对于你的第一个问题,我已经使用 result.should.have.property("_i");
进行了测试,但它失败了。
我嘲笑这样的方法:
async function addUser(id, name){
return {_id:""}
}
它抛出
Uncaught AssertionError: expected { _id: '' } to have property '_i'
符合预期。
所以检查返回的值。你也可以检查 chai documentation
而对于第二个问题,done()
是回调函数完成的地方。 Mocha 也有超时(测试等待的最长时间)。如果在没有 done()
调用的情况下达到最长时间,Mocha 将抛出一个错误,说明它尚未完成(未调用 done)。
如果您不调用 done()
,Mocha 将在不知道函数何时完成的情况下卡住等待。
你得到错误 Timeout of 2000ms exceeded
因为 2 秒是默认值 documentation 说。
Specifies the test case timeout, defaulting to two (2) seconds (2000 milliseconds). Tests taking longer than this amount of time will be marked as failed.
我刚开始学习 mocha 和 chai。我被困在这里
const UserService = new Service();
describe("user-services.spec", () => {
describe("Services testing", () => {
before((done) => {
db();
userModel.remove({}, done);
})
after((done) => {
mongoose.connection.close();
done();
})
it("should add user to db", () => {
let id = 4;
let name = "Alen";
(async () => {
let result = await UserService.addUser(id, name);
console.log("result", result);
result.should.have.property("_i");
//done();
})();
})
})
})
现在我有两个基于上面代码的问题
这个测试用例是不是我把"_id"改成"_i"我也不知道怎么会一直通过?
如果我想对上面的代码使用 done 并取消对 done() 的注释,那么它会给出错误
Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
对于你的第一个问题,我已经使用 result.should.have.property("_i");
进行了测试,但它失败了。
我嘲笑这样的方法:
async function addUser(id, name){
return {_id:""}
}
它抛出
Uncaught AssertionError: expected { _id: '' } to have property '_i'
符合预期。
所以检查返回的值。你也可以检查 chai documentation
而对于第二个问题,done()
是回调函数完成的地方。 Mocha 也有超时(测试等待的最长时间)。如果在没有 done()
调用的情况下达到最长时间,Mocha 将抛出一个错误,说明它尚未完成(未调用 done)。
如果您不调用 done()
,Mocha 将在不知道函数何时完成的情况下卡住等待。
你得到错误 Timeout of 2000ms exceeded
因为 2 秒是默认值 documentation 说。
Specifies the test case timeout, defaulting to two (2) seconds (2000 milliseconds). Tests taking longer than this amount of time will be marked as failed.