Pesquisa de site

javascript - jest comparando objetos. string


Eu recebo este resultado em um Jest

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

Eu faço esta comparação:

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

mas eu obtive este resultado:

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

Resposta #1

Antes de mais nada, você está comparando uma string com um objeto (result é um objeto JS enquanto expected é uma string). Se você quiser converter uma string JSON em um objeto, precisará usar a função 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"

Em segundo lugar, porque em JS os objetos são comparados por referência, este código está comparando se as referências esperada e recebida apontam para a mesma instância de objeto

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

No seu caso, use expect(result).toMatchObject(expected). Isso verifica se o objeto corresponde à estrutura e aos valores em expected (realiza comparação profunda).

Como na documentação do Jest

Use .toMatchObject para verificar se um objeto JavaScript corresponde a um subconjunto das propriedades de um objeto. Ele irá combinar objetos recebidos com propriedades que não estão no objeto esperado.

Então, como resultado, seu código provavelmente ficará assim:

expect(result).toMatchObject({
    partyRoleIdentifier: {
        internalEmployeeIdentifier: {
            id: "id-modified"
        }
    }
})

Artigos relacionados