开玩笑比较对象。串

时间:2020-01-13 13:21:08

标签: javascript node.js json typescript jestjs

我收到一个笑话

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 :(得分:1)

首先,您要比较字符串与对象(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)。这将检查对象是否符合预期的结构和值(进行深度比较)。

jest documentation一样

使用.toMatchObject检查JavaScript对象是否与对象属性的子集匹配。它将接收到的对象与预期对象中没有的属性进行匹配。

因此,您的代码可能看起来像这样:

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