You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jest+Vue3+Vuex+Typescript测试报错:Cannot read property 'then' of undefined

错误原因

你单元测试中 mock 的 $store.dispatch 方法默认返回 undefined,但业务代码里调用 dispatch 后链式调用了 .then() 方法,undefined 不存在 then 属性,因此抛出类型错误。
实际运行环境中 Vuex 的 dispatch 本身会返回 Action 执行结果的 Promise,问题本质是测试侧的 mock 不符合真实接口行为。

修复方法

直接修改 Form.spec.ts 中 $store 的 mock 定义,让 dispatch 返回 Promise 即可:

describe("Form Answers component", () => {
  it("triggers saveFormAnswers method, when button is clicked", async () => {
    const $store = {
      // 模拟dispatch返回resolved状态的Promise,匹配真实行为
      dispatch: jest.fn(() => Promise.resolve({} as AxiosResponse)),
    };
    const wrapper = shallowMount(FormAnswers, {
      global: {
        mocks: {
          $store,
        },
      },
    });

    const spy = jest.spyOn(wrapper.vm, "saveFormAnswers");
    await wrapper.find("button").trigger("click");
    expect(spy).toHaveBeenCalledTimes(1);
  });
});

如果后续需要测试请求失败的分支逻辑,也可以根据测试场景让 dispatch 返回 Promise.reject() 模拟接口报错的情况。


内容的提问来源于stack exchange,提问作者AntoineDorelon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:15:03