node.js - 为什么我的 expect().to.have.property() 传递,即使属性不存在?
问题描述
我正在尝试编写我的 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)
返回查询的结果,所以我希望它没有_id
属性。当我尝试控制台记录它时,我得到undefined
了,但我的测试通过了,没有任何问题。当我控制台记录整个响应时,它似乎没有_id
属性(如预期的那样)。
当我测试另一个肯定不在我的响应中的属性时(例如,对于 property asdasdas
),测试失败。
编辑
当我添加expect(response).to.not.have.property('_id')
我的测试失败。
解决方案
我的问题似乎与 Mongoose 的Document
课程有关。当我更改UsersController.getUser(req)
为UsersController.getUser(req).toJSON()
一切正常并且测试失败时。
我不确定这种行为的原因是什么。似乎Document
类实例(我的响应)可能以某种方式具有_id
字段,但我无法访问它,因为它在我的查询中被取消选择,但是当我使用toJSON()
它时,我得到了我正在寻找的对象,然后它就没有_id
字段了。
推荐阅读
- salesforce - 如何从另一个类中将值放入控制器中?
- sql - 需要使用子查询仅显示“否”
- python - ImportError:运行 pip 时没有名为 pkg_resources 的模块
- ios - 在 iOS 12 上运行时如何删除不受支持的 ARPlaneAnchor.Classification 枚举案例?
- c# - Windows 窗体半饼图
- java - 指定一个 `DataSource` 工厂而不是 Tomcat 的默认值
- grails - Grails 3.3.x 处理文件上传最大大小超出异常
- php - 如何在 PHP 和 MYSQL 中打印和存储正则表达式(正则表达式)
- node.js - 仅在 NodeJS 和 ExpressJS 中满足条件后更新密码
- javascript - 我的代码中不断出现“未捕获范围”错误,我不知道为什么