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
.toMatchObjectpara 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"
}
}
})
