我正在使用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()应该匹配...什么?
谢谢!
答案 0 :(得分:1)
我通过在被测试的猫鼬实例中调用.toJSON()
使它正常工作。
// Example
expect(user.toJSON()).toEqual({
...validBody,
_id: expect.anything(),
createdAt: expect.anything()
)}