Piszę kilka testów w Jest dla API, które zwraca wyniki z Postgres przez bibliotekę pg. Publikuję trochę danych (za pomocą zestawu wartości ed faker, template1), a następnie testuję, czy otrzymane dane są takie same, uwzględniając wartość id i {{ X4}}. Dane template1 zawierają właściwość approved (definicja SQL: approved timestamp with time zone), która jest generowana w następujący sposób:

{
  approved: faker.date.past(),
  description: faker.lorem.paragraph(),
  groups: faker.lorem.paragraph(),
}

Ten test wygląda mniej więcej tak:

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

Problem polega na tym, że test kończy się niepowodzeniem, ponieważ zwrócona wartość approved wydaje się być ciągiem:

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",

Próbowałem rzutować wartość template1.approved tuż przed porównaniem zarówno do daty, jak i do ciągu. Oba podejścia zawodzą. Co robię źle i jak rozwiązać problem?

0
Dycey 30 grudzień 2019, 15:14

1 odpowiedź

Najlepsza odpowiedź

Nie próbowałem wystarczająco mocno - odpowiedź miała przekonwertować znacznik czasu do JSON:

expect(response.body.rows).toStrictEqual([
    {
      ...template1,
      id: 1,
      modified: null,
      approved: new Date(template1.approved).toJSON(), // here
    },
  ])
0
Dycey 1 styczeń 2020, 12:37