使用 Jest 和 React,我如何监视this.setState()并测试该功能hasBeenCalled()
it('shall update targets when engine register has been called', () =>
{
const wrapper = shallow(
<LazyloadProvider>
<p>Wow</p>
</LazyloadProvider>
).instance();
expect(wrapper.state.targets).toEqual({}); // pass
wrapper.engine.register(FIXTURE.REACT_REF); // pass
expect(wrapper.state.targets).not.toEqual({}); //pass
expect(wrapper.setState).toHaveBeenCalled(); // fail
});
Run Code Online (Sandbox Code Playgroud)
发动机吸气剂:
get engine() {
return {
state: this.state,
register: target => {
this.setState(LazyloadUtils.registerOneTarget(target));
},
};
}
Run Code Online (Sandbox Code Playgroud)
小智 9
理想情况下,您需要检查 setState 方法正在更新的 state 对象中的键
expect(wrapper.state('foo')).toEqual('bar')
Run Code Online (Sandbox Code Playgroud)
如果你真的想窥探方法本身,你可以在组件原型上模拟 setState 方法。您需要在创建组件的浅表副本之前执行此操作。
it('shall update targets when engine register has been called', () =>
{
LazyloadProvider.prototype.setState = jest.fn();
const wrapper = shallow(
<LazyloadProvider>
<p>Wow</p>
</LazyloadProvider>
).instance();
expect(wrapper.setState).toHaveBeenCalled();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13398 次 |
| 最近记录: |