为什么我的 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
字段。
我正在尝试编写 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
字段。