开玩笑期望猫鼬时间戳
Posted
技术标签:
【中文标题】开玩笑期望猫鼬时间戳【英文标题】:Jest expect mongoose timestamps 【发布时间】:2019-04-08 03:33:11 【问题描述】:我正在使用 Jest 对 Express / Mongoose API 进行单元测试。 但是,我遇到了有关预期“_id”和时间戳字段(例如“createdAt”和“updatedAt”)的问题。
const validBody =
email: faker.internet.email(),
lastName: faker.name.lastName(),
firstName: faker.name.firstName(),
password: faker.internet.password()
// creation of an user by API call
// ...
const user = await User.findById(response.body.data._id)
// OK
expect(user._id).toEqual(expect.anything())
expect(user.createdAt).toEqual(expect.anything())
// FAIL
expect(user).toEqual(
...validBody,
_id: expect.anything(),
createdAt: expect.anything()
)
两者都首先期望匹配良好。但是,使用完整对象的最后一个不匹配,无论我放入什么 expect.any(...) (甚至是任何东西())。例如对于 createdAt,我尝试过“Object, Date, mongoose.Schema.Types.Date, String” ...
你有什么想法吗?我相信猫鼬在两个最初的期望中将 _id 和 createdAt 对象转换为普通字段。但是,在对象中使用 expect.anything() 应该匹配...任何东西?
谢谢!
【问题讨论】:
【参考方案1】:我通过在正在测试的 mongoose 实例中调用 .toJSON()
使其工作。
// Example
expect(user.toJSON()).toEqual(
...validBody,
_id: expect.anything(),
createdAt: expect.anything()
)
【讨论】:
以上是关于开玩笑期望猫鼬时间戳的主要内容,如果未能解决你的问题,请参考以下文章
如何在数据迁移期间使用 mongoose 设置 updatedAt 时间戳