#javascript #reactjs #unit-testing #jestjs #enzyme
#javascript #reactjs #модульное тестирование #jestjs #фермент
Вопрос:
Мне трудно найти информацию о том, как протестировать эту функцию:
const MyService = {
async stringify (entry, cb) {
try {
const response = await axios.post('localhost:3005/stringify', {
entry
})
cb(null, response.data)
} catch (minificationError) {
if (minificationError.response.status === 500) {
cb('error 1', null)
} else {
cb('error 2', null)
}
}
}
}
Я понимаю, что могу импортировать axios
и издеваться над .post
этим:
axios.post.mockResolvedValue({
data: { some: 'value' }
})
Это было бы здорово, если бы MyService возвращал обещание… но как мне справиться с обратным вызовом? Является ли это плохой практикой и должна ли служба возвращать обещание, а затем обрабатывать ошибки в функциях компонента вместо этого?
Кроме того, как бы я издевался над кодом состояния с помощью jest (для проверки состояний сбоя?)
Комментарии:
1. Является ли это плохой практикой и должна ли служба возвращать обещание, а затем обрабатывать ошибки в функциях компонента вместо этого? — определенно.
Ответ №1:
Сначала вам нужно настроить макет axios, после чего вы должны вызвать свой mockapi в своем тестовом примере
const axios = {
post: jest.fn(() => {
return Promise.resolve({
data: {},
});
}),
create: () => axios,
request: {},
defaults: {
adapter: {},
headers: {},
},
interceptors: {
request: {
use() {},
},
response: {
use() {},
},
},
};
После того, как вы настроите макет axios, вы сможете получить доступ к своему тестовому варианту и вернуть любой макет ответа и код состояния, который вы хотите.
mockAxios.post.mockImplementation((url) => {
if (url.includes("something")) {
return Promise.resolve({ data:{"response":""}, status: 200 });
}
return Promise.reject(new Error("not found"));
});
Комментарии:
1. Спасибо. Чем определение axios отличается от использования
jest.mock("axios")
?