gpt4 book ai didi

reactjs - 如何使用 jest 监视 setState 并测试 toHaveBeenCalled()

转载 作者:行者123 更新时间:2023-12-02 08:04:47 29 4
gpt4 key购买 nike

使用 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
});

发动机 setter/getter :
  get engine() {
return {
state: this.state,
register: target => {
this.setState(LazyloadUtils.registerOneTarget(target));
},
};
}

最佳答案

理想情况下,您需要检查 setState 方法正在更新的状态对象中的键

expect(wrapper.state('foo')).toEqual('bar')

如果你真的想窥探方法本身,你可以在组件原型(prototype)上模拟 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();
}

关于reactjs - 如何使用 jest 监视 setState 并测试 toHaveBeenCalled(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52747438/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com