为什么我的 expect().to.have.property() 即使不存在 属性 也会通过?

Why is my expect().to.have.property() passing even though property is not present?

我正在尝试编写 node.js api 的测试,但在尝试测试 属性 时遇到问题。 我的应用程序正在使用猫鼬。我正在使用 mongodb 选择数据:

User.findById(req.params.id).select('-refresh_token -password -_id');

查询的响应是:

{ 
    login: 'asd', 
    email: 'asd@example.com', 
    role: 'user', 
    __v: 0 
}

在我的测试文件中,我使用 mocha 和 chai 编写集成测试,并且测试结构如下:

let response = await UsersController.getUser(req);
console.log(response._id);
expect(response).to.be.a('object');
expect(response).to.have.property('_id');

UsersController.getUser(req) returns 查询结果,所以我希望它没有 _id 属性。 当我尝试控制台记录它时,我得到 undefined 但我的测试没有任何问题地通过了。当我控制台记录整个响应时,它似乎没有 _id 属性(如预期的那样)。

当我测试另一个 属性 时,这肯定不在我的回复中(例如 属性 asdasdas),测试失败。

编辑

当我添加 expect(response).to.not.have.property('_id') 时,我的测试失败了。

我的问题似乎与 Mongoose 的 Document class 有关。当我将 UsersController.getUser(req) 更改为 UsersController.getUser(req).toJSON() 时,一切正常,但测试失败。

我不确定这种行为的原因是什么。似乎 Document class 实例(我的回复)以某种方式具有 _id 字段但我无法访问它,因为它在我的查询中被取消选择但是当我在其上使用 toJSON()然后我得到了我正在寻找的对象,然后它不再有 _id 字段。