San*_*Rey 6 javascript json node.js typescript jestjs
我在玩笑中收到这个结果
result1 -> {
"partyRoleIdentifier": {
"internalEmployeeIdentifier": {
"id": "id-modified"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我做这样的比较:
expect(result).toBe('{\"partyRoleIdentifier\": {\"internalEmployeeIdentifier\": {\"id\": \"id-modified\"}}}');
Run Code Online (Sandbox Code Playgroud)
但我得到了这个结果:
Expected: "{\"partyRoleIdentifier\": {\"internalEmployeeIdentifier\": {\"id\": \"id-modified\"}}}"
Received: {"partyRoleIdentifier": {"internalEmployeeIdentifier": {"id": "id-modified"}}}
Run Code Online (Sandbox Code Playgroud)
首先,您将字符串与对象进行比较(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"
Run Code Online (Sandbox Code Playgroud)
其次,因为在JS中对象是通过引用进行比较的,所以这段代码是比较预期和接收到的引用是否指向同一个对象实例
let a = {foo: "bar"}
let b = {foo: "bar"}
a == b // false
Run Code Online (Sandbox Code Playgroud)
在你的情况下使用expect(result).toMatchObject(expected). 这检查对象是否与预期的结构和值匹配(执行深度比较)。
正如笑话文档中所示
用于
.toMatchObject检查 JavaScript 对象是否与对象的属性子集匹配。它将接收的对象与预期对象中不存在的属性进行匹配。
所以结果你的代码可能看起来像这样:
expect(result).toMatchObject({
partyRoleIdentifier: {
internalEmployeeIdentifier: {
id: "id-modified"
}
}
})
Run Code Online (Sandbox Code Playgroud)