Убедитесь, что у объекта есть одно свойство, но нет другого, используя toMatchObject в Jest - PullRequest
0 голосов
/ 29 марта 2019

Допустим, что-то возвращает сложный объект:

const value = {
    ...,
    client: { ... },
    ...
};

Я хочу протестировать несколько свойств, а для client Я хочу убедиться, что он имеет определенный name, но не имеет id вообще.

Как мне это реализовать?

expect(value).toMatchObject({
   ...,
   client: ???,
   ...
});

Если бы это было просто name, я бы сделал client: { name: 'expected' }.

Я пытался client: { id: undefined, name: "expected" }, но undefined - это не то же самое, что "не имеет свойства".

Я знаю, что могу сделать отдельный случай expect(value).not.toHaveProperty('client.name'), но было бы здорово иметь один toMatchObject (мне это нужно в нескольких тестах).

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Сортировано с этим, но все еще хочет знать, есть ли лучший способ:

expect.extend({
    matchingAll(actual, expected) {
        return { pass: expected.every(e => e.asymmetricMatch(actual)) };
    }
});

expect(value).toMatchObject({
   ...,
   client: expect.matchingAll([
       expect.objectContaining({ name: 'expected' }),
       expect.not.objectContaining({ id: expect.anything() }),
   ]),
   ...
});

0 голосов
/ 29 марта 2019

очистить свойство не определено и после сравнения

function clear(a){
 Object.keys(a).forEach(key => {
  if (a[key] === undefined) {
    delete a[key];
  }
});
}
let client = { id: undefined, name: "expected" }
clear(client )
console.log(client)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...