Typescript Jest for vuex,测试同一操作的不同返回值
对于如下所示的组件:(简化) 在规范中,我尝试用Typescript Jest for vuex,测试同一操作的不同返回值,typescript,unit-testing,vue.js,jestjs,vuex,Typescript,Unit Testing,Vue.js,Jestjs,Vuex,对于如下所示的组件:(简化) 在规范中,我尝试用 actions = { create: () => jest.fn() .mockReturnValueOnce({ code: true, message: 'error' }) // mock an error on first call .mockReturnValueOnce({ code: false }) // mock success on second
actions = {
create: () => jest.fn()
.mockReturnValueOnce({ code: true, message: 'error' }) // mock an error on first call
.mockReturnValueOnce({ code: false }) // mock success on second call
}
然后我给create打了两次电话
wrapper.vm.create();
console.log(wrapper.vm.$data.status);
wrapper.vm.create();
console.log(wrapper.vm.$data.status);
这个状态不会改变
接下来我尝试的是一个单动作模拟
create: () => ({ code: true, message: 'error' })
然后在测试期间更改操作
wrapper.vm.create();
console.log(wrapper.vm.$data.status);
actions.create = () => ({ code: false });
store.hotUpdate({ actions });
wrapper.vm.create();
console.log(wrapper.vm.$data.status);
然而,地位并没有改变
如何测试这个简单的if/else逻辑
编辑:
在if和else分支中添加控制台日志,我可以看到测试中的模拟操作确实有效(覆盖率为100%),并返回正确的数据。因此每次执行this.status=xx
但是它看起来不像这个。status
链接到wrapper.vm.$data.status
我尝试了nexttick()和forceUpdate()的所有方式,但仍然没有成功。
wrapper.vm.$data.status在修改this.status时不会更改。经过多次尝试和错误后,我找到了nexttick和forceupdate的正确组合,使代码正常工作
actions.create = () => Promise.resolve({ code: false });
store.hotUpdate({ actions });
await wrapper.vm.$forceUpdate();
wrapper.vm.create();
await wrapper.vm.$nextTick();
await wrapper.vm.$forceUpdate();
expect(wrapper.vm.$data.status).toEqual('success');
如果我删除nexttick或forceupdate中的任何一个,测试都不会通过
actions.create = () => Promise.resolve({ code: false });
store.hotUpdate({ actions });
await wrapper.vm.$forceUpdate();
wrapper.vm.create();
await wrapper.vm.$nextTick();
await wrapper.vm.$forceUpdate();
expect(wrapper.vm.$data.status).toEqual('success');