шутка, сравнивая объекты. строка - PullRequest
0 голосов
/ 13 января 2020

Я получаю этот результат в Jest

result1 -> {
        "partyRoleIdentifier": {
          "internalEmployeeIdentifier": {
            "id": "id-modified"
          }
        }
      }

Я делаю это сравнение:

expect(result).toBe('{\"partyRoleIdentifier\": {\"internalEmployeeIdentifier\": {\"id\": \"id-modified\"}}}');

, но я получил этот результат:

 Expected: "{\"partyRoleIdentifier\": {\"internalEmployeeIdentifier\": {\"id\": \"id-modified\"}}}"
    Received: {"partyRoleIdentifier": {"internalEmployeeIdentifier": {"id": "id-modified"}}}

1 Ответ

0 голосов
/ 13 января 2020

Прежде всего вы сравниваете строку с объектом (result - это JS объект, а expected - это строка). Если вы не хотите преобразовывать JSON строку в объект, вам нужно использовать функцию JSON .parse.

let strObj = "{\"foo\":\"bar\"}"
// you can't access object properties from string:
strObj.foo // undefined
let obj = {"foo":"bar"}
obj.foo // "bar"
let parsed = JSON.parse(strObj)
parsed.foo // "bar"

Во-вторых, поскольку в JS объекты сравниваются по ссылке, этот код сравнивает, указывают ли ожидаемые и полученные ссылки на один и тот же экземпляр объекта

let a = {foo: "bar"}
let b = {foo: "bar"}
a == b // false

В вашем случае используйте expect(result).toMatchObject(expected). Это проверяет, соответствует ли объект структуре и значениям ожидаемого (выполняет глубокое сравнение).

Как в Документация шутки

Используйте .toMatchObject, чтобы проверить, что JavaScript объект соответствует подмножеству свойств объекта. Он будет сопоставлять полученные объекты со свойствами, которых нет в ожидаемом объекте.

Таким образом, в результате ваш код, вероятно, будет выглядеть так:

expect(result).toMatchObject({
    partyRoleIdentifier: {
        internalEmployeeIdentifier: {
            id: "id-modified"
        }
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...