我正在尝试在我的组件上编写单元测试,它看起来像这样。
export const myComponent = ({text, list, getData = transport.getData}) => {
const [rows, setRows] = React.useState([]);
React.useEffect(() => {
const fetchData = async () => {
const rows = await getData(list);
setRows(rows);
};
fetchData();
}, [list]);
if (rows.length === 0) {
return null;
}
return (
// some JSX
);
};
rows
问题是组件通过 async 函数获取数据,所以在组件检查是否为空并返回 null后会调用它。
if (rows.length === 0) {
return null;
}
我嘲笑getData
所以它应该返回一些值。但是,我仍然不明白我应该如何用单元测试来覆盖这个组件。我想它应该是一个快照,也许它是不对的。
我的测试:
import React from 'react';
import {myComponent} from '../components/myComponent';
import renderer from 'react-test-renderer';
describe('myComponent', () => {
test('should renders correctly', async () => {
const mock = {
text: 'text',
list: [],
getData: () =>
Promise.resolve([
{
// ...
},
]),
};
const component = renderer.create(<myComponent text={mock.text}
list={mock.list} getData={mock.getData}/>);
let popup = component.toJSON();
expect(popup).toMatchSnapshot();
});
});