Мы проводим модульное тестирование приложения React-Native (с использованием Jest), которое выполняет различные вызовы API с использованием fetch
. Мы протестировали вызовы fetch
в наших функциях вызова API, чтобы протестировать их. Пока это хорошо работает. У нас также есть функции, которые объединяют эти вызовы API и работают с ними. Например, вот одна функция, которая с учетом токена получает первый проект связанного пользователя (project[0]
) и возвращает список элементов этого проекта.
export async function getAllItems(token) {
try {
const response = await getCurrentUser(token); // fetch called inside
const responseJson = await response.json();
const allItemsResp = await getAllItemsFromSpecificProject(
token,
responseJson.projectIds[0],
); // fetch called inside
return await allItemsResp.json();
} catch (error) {
console.log(error);
return null;
}
}
Обе функции getCurrentUser
иgetAllItemsFromSpecificProject
- это простые fetch
звонки, и в настоящее время они корректно издеваются. Вот один тест, который пытается проверить функцию getAllItems
:
it('Gets all items', async () => {
getAccessTokenMockFetch();
const token = await getAccessToken('usherbrooke@powertree.io', 'test!23');
getAllItemsMockFetch();
const items = await getAllItems(token.response.access_token);
expect(items.response.length).toEqual(3);
});
Для ясности, вот как getAccessTokenMockFetch
делается. getAllItemsMockFetch
практически идентичен (с различными данными в ответе):
function getAccessTokenMockFetch() {
global.fetch = jest.fn().mockImplementation(() => {
promise = new Promise((resolve, reject) => {
resolve(accepted);
});
return promise;
});
}
, где принято, содержит содержимое JSON успешного вызова. Когда мы запускаем этот тест, мы получаем следующую ошибку:
TypeError: Cannot read property 'response' of null
, и мы console.log
этот в подвохе:
TypeError: response.json is not a function
, который объясняет, почему ответ null
. Кажется, вызов json()
не понят, и я не знаю, как его высмеивать. Я провел множество исследований SO и не только, но не нашел ничего, что помогло бы мне понять, как решить эту проблему. Это может указывать на то, что я иду по этому пути неправильно, что вполне возможно, поскольку я новичок в Javascript, React-Native и Jest.
Любая помощь по этому вопросу будет принята с благодарностью.