Как смоделировать вызов выборки, который находится внутри функции стрелки? - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь проверить вызов функции, которая удаляет указанные c данные, сохраненные в базе данных в React. Проблема в том, что я хочу только посмеяться над вызовом fetch и запустить все остальное как обычно, потому что сейчас, когда запускаются тесты, данные удаляются в базе данных.

Вот мой код для функции удаления:

deleteEvent = async () => {
    try {
      await fetch(
        "api url",
        {
          method: "DELETE",
        }
      )
        .then((res) => res.json())
        .then(
          (result) => {
            console.log(result);
          },
          (error) => {
            console.log(error);
          }
        );
    } catch (error) {
      console.error(error);
    }
    this.props.history.push("/eventList");
  };

А вот мой тестовый код:

test("deleteEvent function works", (done) => {
  const mockSuccessResponse = {};
  const mockJsonPromise = Promise.resolve(mockSuccessResponse);
  const mockFetchPromise = Promise.resolve({
    json: () => mockJsonPromise,
  });
  jest.spyOn(global, "fetch").mockImplementation(() => mockFetchPromise);

  const historyMock = { push: jest.fn() };
  const wrapper = shallow(<EventState history={historyMock} />);
  wrapper.instance().deleteEvent();
  expect(global.fetch).toHaveBeenCalledTimes(1);
  expect(historyMock.push.mock.calls[0]).toEqual(["/eventList"]);
  global.fetch.mockClear();
  done();
});

Я получаю число раз вызываемых: 0 для ожидания (global.fetch) .toHaveBeenCalledTimes (1); и Received: не определено для ожидаемого (historyMock.pu sh .mock.calls [0]). toEqual (["/ eventList"]);

Любая помощь будет отличной

1 Ответ

0 голосов
/ 24 апреля 2020

Вместо использования spyOn(global, fetch), попробуйте это:

global.fetch = jest.fn().mockImplementation(() => mockFetchPromise);

  const historyMock = { push: jest.fn() };
  const wrapper = shallow(<EventState history={historyMock} />);
  wrapper.instance().deleteEvent();
  expect(global.fetch).toHaveBeenCalledTimes(1);
  expect(historyMock.push.mock.calls[0]).toEqual(["/eventList"]);
  global.fetch.mockClear();
  done();
});
...