Конечно, вы можете! Вы можете использовать метод фиктивной функции mockResolvedValueOnce
для возврата результата для определенного вызова c и mockResolvedValue
для возврата результата по умолчанию.
jest.mock('node-fetch', () => {
const generateResponse = (value) => {
return { json: () => ({ importantData: value }) };
};
return jest
.fn()
.mockResolvedValue(generateResponse(1000)) // default response
.mockResolvedValueOnce(generateResponse(0)) // response for first call
.mockResolvedValueOnce(generateResponse(1)) // response for second call
.mockResolvedValueOnce(generateResponse(2)); // response for third call
});
Обратите внимание, что мы возвращаем объект со свойством json
, чтобы он возвращал данные json при вызове res.json()
в calculate-average.js
.
Если вы хотите вернуть указанный c ответ на основе параметра url
, вам нужно будет смоделировать желаемое поведение в возвращенной фиктивной функции для node-fetch
. В следующем примере будет возвращено значение, возвращаемое для URL-адресов, для которых счетчик больше 100, он вернет 1000. В противном случае он вернет то же значение, которое присутствует в url
:
jest.mock('node-fetch', () => {
return jest.fn((url) => {
// Get and parse the URL parameter.
const value = parseInt(url.split('/').slice(-1)[0], 10);
return Promise.resolve({
json: () => ({ importantData: value > 100 ? 1000 : value })
});
});
});