测试state更新
来源:6-5 PriceForm 组件编写的指导思想
慕瓜5414566
2020-12-15
老师有遇到一个测试问题卡住
在最后提交编辑的时后,toHaveBeenCalledWith有被呼叫,但newItem的资料不一样(是旧的)
似乎是state 没有更新,想问说像这种情况mock方法要怎么去测props回调的参数传出去是对的
之前遇到hook function不能测state时,折腾了几天才了解可以测props就好
传进来的props测没问题,但props的回调参数揣摩之前讲的用mock的方法发现会不好使…
然后原本有用老师说文檔的act跟update(hooks support),以为可以触发更新?
写回答
1回答
-
同学你好 我不清楚我是否理解你的意思 测试给你修改好了 文档在这里:https://enzymejs.github.io/enzyme/docs/api/ShallowWrapper/simulate.html#example-functional-component
it('submit with change value should trigger callback with right object',()=>{ wrapper2.find('#inputTitle').simulate('change',{ target:{value:'工資'}}); wrapper2.find('#inputAmount').simulate('change',{ target:{value:'2000'}}); wrapper2.find('#inputDate').simulate('change',{ target:{value:'2020-12-13'}}); wrapper2.find('#submit').simulate('click'); // const newItem = {...testItems[0],title:'工資',amount:2000,date:'2020-12-13'}; // expect(props.onFormSubmit).toHaveBeenCalledWith(newItem);//%%Number of calls: 0 wrapper2.update(); // wrapper2 = wrapper2.update(); const newItem = {...props_with_item.ledgerItem,title:'工資',amount:2000,date:'2020-12-13'}; // expect(props_with_item.onFormSubmit).toHaveBeenCalledWith(newItem);//@@哪個好 expect(wrapper2.props().onFormSubmit).toHaveBeenCalledWith(newItem); })
不是所有的更新都必须使用 act 包裹和 调用 update方法的,上次是因为我们创建了自定义的 mock 对象,这里 enzyme 的 simulate 已经在内部帮我们处理掉了。
所以如果你写的是 function component,多关注 enzyme 的文档,它上面已经有好多新的测试方法啦。
112020-12-22
相似问题