Предполагая, что у меня есть модуль, который возвращает обещание. Я хочу поиздеваться над разными результатами этого обещания, чтобы протестировать функцию, частью которой является этот модуль. Я издеваюсь над модулем следующим образом:
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}}.
Я уже пробовал разные вещи. Сначала оберните макет в функцию и дайте ответ в качестве аргумента. --> не удается, потому что макеты не могут выводить переменные из области видимости.
Я пытался вызвать jest.doMock в тесте, но это не запускает запрос правильно.
я пытался сделать
const mockResponse = jest.fn();
jest.mock("../request", () => {
return () =>
new Promise((resolve, reject) => {
return resolve({
mockResponse
});
});
});
А затем вызовите mockResponse.mockReturnValueOnce(value).
Успеха пока нет. Кто-нибудь видит выход?





Вы можете создать фиктивную функцию по умолчанию на верхнем уровне с помощью 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
}
})
);
});
ответ с машинописным текстом будет:
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
}
})
);
});
Проблема с этой реализацией в том, что моему машинописному тексту это не нравится. mockImplementationOnce не существует по запросу. Поэтому мне нужно найти обходной путь для этого.