java单元测试当前日期_如何避免在jest /酶单元测试中使用setTimeout来提供反应本机时间来呈现异步函数...

基本上,我有一个React Native组件,它是我的Login组件 . 我想测试多个状态变化 .

我的组件的第一个阶段是显示一个加载组件,然后,它通过多个异步函数,如:

NetInfo:为了查看我是否可以使用网络登录自动登录

setState:一些状态更改,也有回调函数 .

fetch:从API获取信息 .

到目前为止,我有fetch和NetInfo都被嘲笑 . Coverage显示某些函数的执行方式与setState中的回调类似,但是,例如,snapchots显示第一个原始状态,即加载微调器 .

我理解这可能是预期的,所以我尝试在浅层包装器实例上执行forceUpdate和updae,并且快照没有变化 . 唯一对我有用的是设置100ms的超时,然后检查包装器 . 此外,我需要手动执行一些内部函数,因为不知何故,并非所有函数都执行,比如setState中的回调 . 这很奇怪,因为覆盖范围显示setState执行,但不是回调 .

开玩单元测试:

it("should store the confirmation result", (done) => {

let wrapper = shallow(

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

我一直在阅读关于向Jest返回一个承诺,所以它们都被链接,但是我只看到用fetch制作并将函数作为道具传递给组件,我直接在组件内部完成所有功能 .

我应该重构需要外部功能的组件吗?在每个单元测试中覆盖和模拟内部函数?

测试这种复杂的场景真的很难 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值