sfr*_*ini 6 reactjs jestjs react-native enzyme
基本上,我有一个React Native组件,这是我的Login组件。我想测试多个状态变化。
我的组件的第一阶段是显示一个加载组件,然后通过多个异步函数,例如:
到目前为止,我已经模拟了fetch和NetInfo。覆盖率表明,某些函数的执行方式类似于setState中的回调,但是例如snapchots显示了第一个原始状态,即加载微调器。
我知道这是预料之中的,因此我尝试在浅层包装实例上执行forceUpdate和updae,并且快照中没有任何变化。对我唯一有效的方法是将超时设置为100ms,然后检查包装器。另外,我需要手动执行一些内部功能,因为某种程度上,并非所有功能都可以执行,就像setState中的回调一样。这很奇怪,因为覆盖率表明setState是执行的,而不是回调。
笑话单元测试:
it("should store the confirmation result", (done) => {
let wrapper = shallow( <LoginComponent
sms={{
enabled: true,
sms_placeholder: 'Phone Number',
text: 'Enter your phone number',
buttonSend: {
text: 'SEND'
}
}}
/>);
wrapper.setState({phone: '1234567890'});
setTimeout(()=>{
expect(wrapper.update()).toMatchSnapshot();
const spySendSms = jest.spyOn(wrapper.instance(), "sendSms");
const spyError = jest.spyOn(wrapper.instance(), "error");
wrapper.update().find("[testID='smsButtonSend']").simulate("press");
expect(spySendSms).toHaveBeenCalledTimes(1);
expect(spyError).toHaveBeenCalledTimes(0);
done();
}, 100); });
Run Code Online (Sandbox Code Playgroud)
我一直在阅读有关将承诺返还给Jest的信息,因此它们都被链接在一起,但是我只看到它是通过fetch生成的,并将功能作为道具传递给组件的,而我直接在组件内部拥有所有这些功能。
我应该重构需要外部功能的组件吗?在每个单元测试中都覆盖并模拟内部函数?
很难测试这种复杂的场景。
| 归档时间: |
|
| 查看次数: |
1018 次 |
| 最近记录: |