Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript Jest for vuex,测试同一操作的不同返回值_Typescript_Unit Testing_Vue.js_Jestjs_Vuex - Fatal编程技术网

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