我在我的组件中做了一些api取件 . 在进行单元测试时,我想模拟某些成员函数的实现:
//component.js
class Foo extends Component {
prepareData() {
getSthFromApi().then(getMoreFromApi).then(val=>this.setState({val}));
}
componentDidMount() {
this.prepareData();
}
}
//test.js
//What should this be?
Foo.prepareData = jest.fn().mockImplementation(() => {
this.setState({val:1});
})
const comp = shallow(<Foo />);
我该怎么办?
2 回答
此代码的问题是
Foo.prepareData
是静态方法,而prepareData
是实例方法 .由于
prepareData
是原型方法,因此可以在类原型上进行模拟;这是one of the reasons为什么原型方法更可取:请注意,
mockImplementation
应该提供常规功能,因为它不需要词法this
.您不应该模拟您的成员函数,而是可以模拟getSthFromApi函数并同时测试componentDidmount和prepareData .