Jest метод objectContains, который использует toBe вместо проверки свойств toEqual? - PullRequest
0 голосов
/ 20 мая 2018

Существует ли метод, аналогичный objectContaining, который использует toBe вместо toEqual проверки свойств?

Следующий выдуманный тестовый пример (который проходит) подчеркивает проблему.Я хотел бы заявить, что свойство button объекта, переданного в foo, на самом деле button1 и поэтому должно завершиться ошибкой для аналогичного объекта button2.

test('foo', () => {
  const button1 = document.createElement('button');
  const button2 = document.createElement('button');
  const foo = jest.fn();
  foo({button: button1});
  expect(foo).toBeCalledWith(expect.objectContaining({button: button2}));
});

В качестве альтернативы, как я могпереписать этот контрольный пример для поддержки моих необходимых утверждений?

1 Ответ

0 голосов
/ 20 мая 2018

Я думаю, что способ сравнения вывода в вашем тесте приведет к тому, что он пройдет, потому что аргумент действительно читается как:

{ "button": <button /> }

Вместо экземпляра элемента документа.

Вы всегда можете присвоить уникальный идентификатор каждой кнопке во время создания, чтобы сделать флешку подтверждения.

test('foo', () => {
    const button1 = document.createElement('button');
    const button2 = document.createElement('button');
    button1.id = 'button1';
    button2.id = 'button2';
    const foo = jest.fn();
    foo({button: button1});
    expect(foo).toBeCalledWith({button: button1}); // Will pass
    expect(foo).toBeCalledWith({button: button2}); // Will fail
});

Если вы хотите использовать строгую проверку равенства toBe (), я не знаю осопоставимый метод Object Contains с Jest, но вы можете запросить аргументы, которые предоставляет Jest:

expect(foo.mock.calls[0][0].button).toBe(button1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...