开玩笑期望猫鼬时间戳

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()
)

【讨论】:

以上是关于开玩笑期望猫鼬时间戳的主要内容,如果未能解决你的问题,请参考以下文章

只显示最近的猫鼬时间戳?

使用猫鼬时间戳选项不会创建属性

期望时间戳值Cassandra的长或日期字符串表示

如何在数据迁移期间使用 mongoose 设置 updatedAt 时间戳

Mongoose:自动添加时间戳引发错误 $__isSelected 不是函数

交换 Graphite 在 Grafana 中返回的时间戳和值