Я пытаюсь издеваться над Аксиосом, используя Jest, однако я не добился большого успеха.Я хотел бы избежать использования отдельных пакетов (jest-mock-axios), чтобы лучше познакомиться с процессом насмешек Jest.Проект сделан с самой последней версией create-реагировать-приложение (v2.1.1).Я также использую фермент для испытаний.
В настоящее время у меня проблемы с настройкой макета axios.Вот фрагмент соответствующего кода и начальный тест (логика тестирования будет обновлена, как только я смогу выяснить, в чем проблема):
App.js
import React, { Component } from 'react';
import axios from 'axios';
class App extends Component {
constructor(props) {
super(props);
this.state = {
currentPhase: null,
};
this.hashcodeResults = '';
this.transcriptionData = '';
this.handleFileSelectionSubmit.bind(this);
}
handleFileSelectionSubmit(event) {
event.preventDefault();
const audioData = [];
const targetFile = event.target[0].files;
const fileInfo = {
lastModifiedDate: targetFile[0].lastModifiedDate,
name: targetFile[0].name,
path: targetFile[0].path,
size: targetFile[0].size,
type: targetFile[0].type,
};
audioData.push(fileInfo);
axios({
method: 'post',
url: `${baseUrl}/hash`,
data: {
audioFiles: audioData,
},
})
.then((response) => {
if (response.data.inDatabase === false) {
this.hashcodeResults = response.data.result;
this.setState({
currentPhase: 'hashCodeGenerated',
});
} else {
this.hashcodeResults = response.data.result;
this.transcriptionData = response.data.transcript;
this.setState({
currentPhase: 'transcriptionDownloadComplete',
});
}
})
.catch((error) => {
throw new Error('ERROR (Hashcode Generation): ', error);
});
}
export default App;
App.test.js:
import React from 'react';
import { shallow } from 'enzyme';
import axios from 'axios';
import App from '../App';
jest.mock('axios');
describe('Application audio file submission', () => {
describe('Files that have not been previously transcribed', () => {
it('Should return data', () => {
const response = { data: true };
axios.post.mockResolvedValue(response);
const wrapper = shallow(<App />);
const inst = wrapper.instance();
const fakeEvent = {
preventDefault: () => true,
target: [{
files: 'someFile',
lastModifiedDate: 'someDate',
name: 'someName',
path: 'somePath',
type: 'someType',
}],
};
inst.handleFileSelectionSubmit(fakeEvent).then(res => expect(res.data).toBeDefined());
});
});
});
Когда я запускаю тест, я вижу ошибку "TypeError: Невозможно прочитать свойство 'then" из undefined ", иуказывает на вызов axios в функции handleFileSelectionSubmit файла App.js.
Любое руководство будет высоко ценится!