Как сопоставить два массива с массивом объектов в шутку - PullRequest
0 голосов
/ 04 мая 2018

Я отправляю данные на сервер и сопоставляю возвращенные данные с отправленными данными. Если для того, чтобы сравнить опции и вложенные варианты, используйте wait.arrayContained (array), он ругается на идентификаторы и поля, которые добавляют db. Как сравнить объекты с массивами, которые содержат массивы объектов?

* ** 1003 тысяча два * Пример

Данные для отправки:

{
  "name": "red dress",
  "options": Array [
    Object {
      "name": "size",
      "variants": Array [
        Object {
          "name": "M",
        },
        Object {
          "name": "L",
        },
        Object {
          "name": "S",
        },
      ],
    },
  ],
}

Возвращенные данные:

{
  "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,
        },
      ],
    },
  ],
}

Тест:

expect(body.data).toMatchObject(productData)

enter image description here

1 Ответ

0 голосов
/ 22 октября 2018

Может быть, вы могли бы использовать цикл forEach для проверки соответствующих данных? Исходя из ваших отправленных данных, я полагаю, что в ответ включены варианты и варианты.

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

Аналогично для вариантов:

it('has provided variants', () => {
  sent.options[0].variants.forEach(v => {
    expect(received.options[0].variants).toContainEqual(
      expect.objectContaining(v)
    )
  })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...