Мне никогда раньше не приходилось тестировать такую функцию. Любые идеи были бы хорошы. Функция в основном передает URL-адрес для извлечения и возвращает json. URL-адрес сообщает fetch, какой статический файл json нужно получить.
const getJSON = async <T>(url): Promise<T> => {
try {
return await fetch(url).then(res => {
if (!res.ok) {
throw new Error('Network response was not ok.');
}
if (!res.headers.get('content-type').includes('application/json')) {
throw new Error('Response is not JSON');
}
return res.json();
});
} catch (e) {
// some error handling
}
};
export default fetchJSON;
На первый взгляд я даже не знаю, что тестировать. Единственное, что я придумал, это попытаться шпионить за методом выборки и заставить ответ быть какими-то фиктивными данными. Я попробовал следующее. Я попытался издеваться над получением и вызовом. Ожидание, показанное ниже, проходит, но переменная результата не определена, поэтому я не могу проверить какое-либо возвращаемое значение.
import fetchJSON from '../fetchJSON';
global.fetch = jest.fn(() =>
Promise.resolve({
json: () => Promise.resolve({ name: 'foo' }),
})
);
beforeEach(() => {
fetch.mockClear();
});
it('finds blah blah', async () => {
const result = await fetchJSON('');
expect(fetch).toHaveBeenCalledTimes(1);
});