如何匹配两个包含玩笑中的对象数组的数组

Kho*_*liy 6 javascript node.js jestjs

我将数据发送到服务器并将返回的数据与发送的数据进行匹配。如果使用expect.arrayContaining(array)来比较选项和嵌套变体,它会在添加db的id和字段上发誓。如何将对象与包含对象数组的数组进行比较?

例子

要发送的数据:

{
  "name": "red dress",
  "options": Array [
    Object {
      "name": "size",
      "variants": Array [
        Object {
          "name": "M",
        },
        Object {
          "name": "L",
        },
        Object {
          "name": "S",
        },
      ],
    },
  ],
}
Run Code Online (Sandbox Code Playgroud)

返回数据:

{
  "id": "dc67efd8-dcc4-43df-a8eb-9d95ea641749",
  "name": "red dress",
  "options": Array [
    Object {
      "id": 1,
      "name": "size",
      "productId": "dc67efd8-dcc4-43df-a8eb-9d95ea641749",
      "variants": Array [
        Object {
          "id": 1,
          "name": "M",
          "optionId": 1,
        },
        Object {
          "id": 5,
          "name": "S",
          "optionId": 1,
        },
        Object {
          "id": 6,
          "name": "L",
          "optionId": 1,
        },
      ],
    },
  ],
}
Run Code Online (Sandbox Code Playgroud)

测试:

expect(body.data).toMatchObject(productData)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Jac*_*rry 1

也许你可以使用forEach循环来检查相关数据?我根据您发送的数据推测,重要的是响应中包含提供的选项和变体。

it('has provided options', () => {
  sent.options.forEach(o => {
    expect(received.options).toContainEqual(
      expect.objectContaining({ name: o.name })
    )
  })
})
Run Code Online (Sandbox Code Playgroud)

对于变体也类似:

it('has provided variants', () => {
  sent.options[0].variants.forEach(v => {
    expect(received.options[0].variants).toContainEqual(
      expect.objectContaining(v)
    )
  })
})
Run Code Online (Sandbox Code Playgroud)