Разрешение модуля Jest mock со значением переменной - PullRequest
0 голосов
/ 28 января 2019

Если у меня есть модуль, который возвращает обещание.Я хочу высмеять различные результаты этого обещания, чтобы протестировать функцию, частью которой является этот модуль.Я смоделирую модуль следующим образом:

jest.mock('../request', () => {
    return () => new Promise((resolve, reject) => {
        return resolve({
            response: { ok: true }
        });
    });
});

Мой первый тест выполняется

test("The function resolves", () => {
  const initialState = { apiData: getState("postData", {}, "ready", "POST") };
  const store: any = mockStore(initialState);
  return expect(
    performApiRequest("postData/", {}, { data: "json" })(dispatch, () =>
      store.getState()
    )
  ).resolves.toBeUndefined();
});

Проблема теперь в том, чтобы протестировать другую функцию, где разрешаемое значение должно быть другим,например {response: {ok: false}}.

Я уже пробовал разные вещи.Сначала оберните макет в функцию и дайте ответ в качестве аргумента.-> не удается для mocks не может вывести из области видимости переменных.

Я пытался вызвать jest.doMock в тесте, но это не правильно запускает запрос.

Я пытался сделать

const mockResponse = jest.fn();
jest.mock("../request", () => {
  return () =>
    new Promise((resolve, reject) => {
      return resolve({
        mockResponse
      });
    });
});

А затем вызовите mockResponse.mockReturnValueOnce (значение).

Успех пока отсутствует.Кто-нибудь видит выход?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

ответ с машинописью будет:

import request from '../request';

jest.mock("../request", () =>
  jest.fn(() =>
    Promise.resolve({
      response: {
        ok: true
      }
    })
  )
);

test("MyTest", () => {
    (request as jest.Mock).mockImplementationOnce(() =>
        Promise.resolve({
            response: {
                ok: true
            }
        })
    );
});
0 голосов
/ 28 января 2019

Вы можете создать макет по умолчанию на верхнем уровне с помощью jest.fn.После создания макета вы можете переопределить реализацию функции в тестовом примере с помощью mockImplementation или mockImplementationOnce.Вы можете найти больше информации об этом в документации Jest .

import request from '../request';

jest.mock("../request", () =>
  jest.fn(() =>
    Promise.resolve({
      response: {
        ok: true
      }
    })
  )
);

test("MyTest", () => {
  request.mockImplementationOnce(() =>
    Promise.resolve({
      response: {
        ok: false
      }
    })
  );
});
...