开玩笑期望猫鼬时间戳

时间:2018-11-04 16:57:03

标签: javascript mongoose jestjs

我正在使用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(...)(甚至everything()),使用完整对象的最后一个都不匹配。例如,对于createdAt,我尝试了“对象,日期,mongoose.Schema.Types.Date,字符串” ...

你有什么主意吗?我相信猫鼬会在两个第一次期望期间将_id和createdAt对象转换为纯字段。但是,在对象中使用Expect.anything()应该匹配...什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

我通过在被测试的猫鼬实例中调用.toJSON()使它正常工作。

// Example

expect(user.toJSON()).toEqual({
    ...validBody,
    _id: expect.anything(),
    createdAt: expect.anything()
)}