Тестирование аргументов с помощью toBeCalledWith () в Jest - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть функция, которая использует puppetteer объект page для оценки и возврата некоторых данных.

Я хотел бы написать модульный тест с jest, чтобы проверить, принимает ли page.evaluate() указанные параметры

Это функция

async function cinemasfromState(page, state) {
  const CINEMA_SELECTOR = `div[data-state=$[STATE]] div.top-select-option a.eccheckbox`;
  let res = await page.evaluate(
    (elementPath, state) => {
      let results = Array.from(document.querySelectorAll(elementPath)).map(
        function(cin, index) {
          return {
            //Stuff
          };
          return result;
        },
        { state }
      );
    },
    CINEMA_SELECTOR.replace("$[STATE]", state),
    state
  );

  return res;
}

Вот как выглядит мой тест

describe("cinemasfromState", () => {
  let page_mock = {
    click: jest.fn(() => Promise.resolve()),
    evaluate: jest.fn((selector, state) => Promise.resolve())
  };

  test("page.evaluate called correctly ", async () => {
    await cinemasfromState(page_mock, "KAN");
    expect(page_mock.evaluate).toBeCalledTimes(1);
    expect(
      page_mock.evaluate)toBeCalledWith(
        "div[data-state=KAN] div.top-select-option a.eccheckbox",
        "KAN"
      );
  });
});

И я получаю приведенную ниже ошибку в качестве результата моего теста

● cinemasfromState › page.evaluate called correctly

    expect(jest.fn()).toBeCalledWith(expected)

    Expected mock function to have been called with:
      "div[data-state=KAN] div.top-select-option a.eccheckbox"
    as argument 1, but it was called with
      [Function anonymous].

    Difference:

      Comparing two different types of values. Expected string but received function.
      "KAN"
    as argument 2, but it was called with
      "div[data-state=KAN] div.top-select-option a.eccheckbox".
      undefined
    as argument 3, but it was called with
      "KAN".

    Difference:

      Comparing two different types of values. Expected undefined but received string.

      52 |     expect(page_mock1.evaluate).toBeCalledTimes(1);
      53 |     expect(page_mock1.evaluate).toBeCalledWith(
    > 54 |       "div[data-state=KAN] div.top-select-option a.eccheckbox",
         |                            ^
      55 |       "KAN"
      56 |     );
      57 |   });

Любая помощь в написании теста для проверки аргументов?

1 Ответ

0 голосов
/ 11 ноября 2018

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

Например, если вы позвоните func(arg1, arg2), то expect(func).toBeCalledWith(arg2) не удастся, потому что вы также не утверждали на arg1. Это то, что происходит в вашем случае, потому что первый аргумент page.evaluate() на самом деле является анонимной функцией.

Итак, ваш тест должен быть примерно таким:

expect(page_mock.evaluate).toBeCalledWith(
  expect.any(Function),
  "div[data-state=KAN] div.top-select-option a.eccheckbox",
  "KAN"
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...