我有一个函数,当prop(newItems)更改时应该调用该函数:
componentDidUpdate(prevProps) { const { title } = this.state; const { newItems } = this.props; const { newItems: prevNewItems } = prevProps; if (prevNewItems !== newItems) { this.updateTitle(title, newItems); // testing if this method gets called } }
下面测试中的问题是,在我调用setProps之后,componentDidUpdate生命周期钩子没有注册新的prop,因此间谍收到“0个调用”
it('calls updateTitle when newItems changes', () => { const wrapper = mount( <Provider store={store}> <MyComponent {...props} newItems={0}/> </Provider>, ); const MyComponentWrapper = wrapper.find('MyComponent'); const spy = jest.spyOn(MyComponentWrapper.instance(), 'updateTitle'); wrapper.setProps({ children: <MyComponent {...props} newItems={1} /> }); wrapper.update(); expect(spy).toHaveBeenCalled(); // Received number of calls: 0 (should be 1) });
如何更新包装在Provider中的子组件(MyComponent)上的道具?