【发布时间】:2023-03-09 05:42:01
【问题描述】:
我有一个组件在componentDidMount 中使用axios 从服务器检索数据。当使用 Jest / Enzyme 对组件进行单元测试时,测试会因网络错误而失败。
我如何模拟 componentDidMount 以便不会发生对服务器的 axios 调用?
有问题的组件使用React DnD 并且是DragDropContext。
class Board extends Component {
componentDidMount() {
this.load_data();
}
load_data = () => {
// axios server calls here
}
}
export default DragDropContext(HTML5Backend)(Board);
示例测试:
it('should do something', () => {
const board = shallow(<Board />);
// get the boardInstance because board is wrapped in Reactdnd DragDropContext
const boardInstance = board.dive().instance();
boardInstance.callSomeMethodToTestIt();
expect(testSomething);
}
所以我只需要模拟componentDidMount 或load_data 以便它不会尝试调用服务器。如果load_data 方法作为道具传入,我可以简单地将该道具设置为jest.fn()。然而,这是我没有收到任何道具的顶级组件。
【问题讨论】:
-
如果你只是通过
board.instance().componentDidMount = jest.fn()重新分配它呢? -
如果您使用酶,您可以利用
mount()
标签: javascript reactjs jestjs enzyme