#javascript #reactjs #axios #jestjs #spy
Вопрос:
Я новичок в шутках (и тестировании javascript в целом). У меня есть Register
компонент, который в основном представляет собой страницу для регистрации пользователя. Когда форма будет заполнена и нажата кнопка отправить, она будет использоваться axios
для отправки POST
запроса на сервер.
Я пытаюсь написать тест для этой функции. Для этого мне нужно поиздеваться axios
. Я написал следующий тест, но при утверждении, что axios
он был вызван, я получаю ошибку:
expect(jest.fn()).toHaveBeenCalled()
Expected number of calls: >= 1
Received number of calls: 0
Вот мой тест:
jest.mock('axios')
it('should save value when submitted', async () => {
render(
<Register />
);
ReactTestUtils.Simulate.change(field('email'), {
target: { value: 'test@mail.com', name: 'email'}
})
ReactTestUtils.Simulate.change(field('first-name'), {
target: { value: 'test', name: 'first-name'}
})
ReactTestUtils.Simulate.change(field('last-name'), {
target: { value: 'test', name: 'last-name'}
})
ReactTestUtils.Simulate.change(field('password'), {
target: { value: 'test', name: 'password'}
})
ReactTestUtils.Simulate.change(field('confirm-password'), {
target: { value: 'test', name: 'confirm-password'}
})
const postSpy = jest.spyOn(axios, 'post')
ReactTestUtils.Simulate.submit(form('register'));
expect(postSpy).toHaveBeenCalled();
});
В основном я заполняю все необходимые поля в своей форме, а затем отправляю ее.
Функция, которая обрабатывает отправку в моем Register
компоненте, выглядит следующим образом:
const onSubmit = data => {
const res = axios.post("http://localhost/register", data);
}
Есть идеи, что я упускаю или делаю неправильно?
Спасибо
Комментарии:
1. Откуда берутся функции
field()
иform()
?2. Это просто помощники, которых я определил, чтобы получить форму и поле в форме соответственно. Они отлично работают, у меня есть другие тесты, которые их используют
3. Ваш код не вызывает
axios.post()
, он вызываетaxios()
, поэтому вашaxios.post
шпион никогда не будет вызван4. О да, я вижу это. Я вызываю axios и определяю метод в переданном объекте, я не вызываю axios.post. Заменит мой код и попробует его снова. Большое спасибо
5. @Phil Я обновил свой код для использования
post
(код для этого вопроса также был обновлен), но я получаю точно такой же результат