Я реализовал выборку и тестовый случай следующим образом, но это дает мне ошибку (я плохо разбираюсь в модульном тестировании).
Main.js
import React, { Component } from 'react';
class Main extends Component {
constructor(props) {
super(props);
this.state = {
testData: [],
}
}
componentDidMount() {
fetch(`http://testurl.com/testData`)
.then(response => response.json())
.then(result => this.setState({ testData: result }));
}
render() {
const {testData} = this.state;
return (
<div className="main">
{ testData.data &&
<section>
<CustomComponent movies={ testData.data } />
</section>
}
</div>
);
}
}
export default Main;
Main.test.js
import React from 'react';
import ReactDOM from 'react-dom';
import { mount, shallow } from 'enzyme';
import { fetchMock } from 'fetch-mock';
import Main from "../src/Main";
import testData from './_mockData_/testData'
it('should render without crashing', () => {
const div = document.createElement('div');
ReactDOM.render(<Main />, div);
ReactDOM.unmountComponentAtNode(div);
});
describe('should renders Main correctly', () => {
fetch('http://testurl.com/testData').then(res => {
expect(res.data).toEqual(testData)
})
});
Даже я пытался использовать http://www.wheresrhys.co.uk/fetch-mock/, но без разницы.
describe('should renders Main correctly', () => {
fetchMock.get('http://testurl.com/testData').then(res => {
expect(res.data).toEqual(testData)
})
});
Всегда я получал следующееошибка.
ReferenceError: выборка не определена
Любая помощь будет принята с благодарностью.
Отредактировано:
Согласно комментарию я отредактировал свой код следующим образом, но не повезло.
import testData from './_mockData_/testData'
describe('Main', () => {
it('renders without crashing', () => {
const tree = shallow(<Main />);
expect(tree).toMatchSnapshot();
});
beforeEach(() => {
fetch.resetMocks()
})
it('calls API and returns data to me', () => {
fetch.mockResponseOnce(JSON.stringify({ someData: testData }))
//assert on the response
fetch(`http://testurl.com/testData`).then(res => {
expect(res.data).toEqual(testData)
})
//assert on the times called and arguments given to fetch
expect(fetch.mock.calls.length).toEqual(1)
expect(fetch.mock.calls[0][0]).toEqual('http://testurl.com/testData')
})
});
Получил следующую ошибку:
TypeError: Невозможно прочитать свойство 'then' из неопределенного