Следуя по этой ссылке , я попытался написать модульный тест при издевании над Axios (используя Typescript).
Использование экземпляра Axios для установки baseUrl
.
// src/infrastructure/axios-firebase.ts
import axios from 'axios';
const axiosThroughFirebase = axios.create({
baseURL: 'firebase_URL'
});
export default axiosThroughFirebase;
Вот сокращенная версия компонента, который я хочу протестировать.
// src/container/MainContainer/MainContainer.tsx
import axios_firebase from '../../infrastructure/axios-firebase';
...
public componentDidMount() {
axios_firebase.get('firebase_url/data.json')
.then(resp => this.setState({ stuff }));
}
И затем мой тестовый файл.
// src/container/MainContainer/MainContainer.test.tsx
jest.mock('../../infrastructure/axios-firebase', () => {
return {
get: jest.fn(() => Promise.resolve(someFakeData))
};
});
import axios_firebase from '../../infrastructure/axios-firebase';
test('fetches data on componentDidMount', async () => {
const wrapper = enzyme.shallow(<MainContainer />);
wrapper.instance().componentDidMount()
.then(() => {
expect(axios_firebase.get).toHaveBeenCalled();
});
});
Когда я запускаю этот тест, я получаю следующее сообщение об ошибке:
● MainContainer › encountered a declaration exception
TypeError: Cannot read property 'get' of undefined
14 |
15 | public componentDidMount() {
> 16 | axios_firebase.get('url_to_data')
Мне показалось, что я точно перешел по начальной ссылке .. Не могу себе представить, что проблема с использованием Typescript?Я не понимаю, почему экземпляр Axios, который был отключен, в коде не определен.