在Jest中比较Postgres的时间戳结果

4
我正在使用Jest编写一些测试,针对使用pg库从Postgres返回结果的API。我发布了一些数据(通过faker生成的template1值集),然后测试返回的内容是否相同,允许有一个id值和modified字段。 template1数据包括一个approved属性(SQL定义:approved timestamp with time zone),生成方式如下:
{
  approved: faker.date.past(),
  description: faker.lorem.paragraph(),
  groups: faker.lorem.paragraph(),
}

这个测试大致如下:

expect(response.body.rows).toStrictEqual([
    {
      ...template1,
      id: 1,
      modified: null,
    },
  ])

问题在于测试失败,因为approved的返回值似乎是一个字符串:
expect(received).toStrictEqual(expected) // deep equality

- Expected
+ Received

@@ -1,8 +1,8 @@
  Array [
    Object {
-     "approved": 2019-12-19T03:48:20.613Z,
+     "approved": "2019-12-19T03:48:20.613Z",
      "approved_by": "Percy_Hills@yahoo.com",

在比较之前,我尝试将template1.approved的值转换为日期和字符串。但两种方法都失败了。我做错了什么,该如何解决这个问题?


答案是 expect(response.body.rows).toStrictEqual([ { ...template1, id: 1, modified: null, approved: new Date(template1.approved).toJSON(), }, ]) - Dycey
1个回答

4

我没有努力尝试 - 答案是将时间戳转换为JSON:

expect(response.body.rows).toStrictEqual([
    {
      ...template1,
      id: 1,
      modified: null,
      approved: new Date(template1.approved).toJSON(), // here
    },
  ])

你救了我的一天。 - glam
很高兴我能帮到你;-) - Dycey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接