如何在 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();
            })();
        })
    })
})

现在我有两个基于上面代码的问题

  1. 这个测试用例是不是我把"_id"改成"_i"我也不知道怎么会一直通过?

  2. 如果我想对上面的代码使用 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.