Vue3 + @vue/test-utils@next + VueRouter4 + Jest 单元测报错?

2023-03-31 0 1,186

单元测试内容

test("Foo.vue GoAbout", () => {

  const vm = shallowMount(Foo as any, {});

  const oBtn1 = vm.find("#btn1");
  oBtn1?.trigger("click");
  expect(vm.vm.$route.path).toBe('/about')
});

组件

<template>
  <div>
    <div id="box">{{ value }}</div>
    <button id="btn" @click="onStoreChange">Change Store</button>
    <button id="btn1" @click="onGoToAbout">Go To About</button>
  </div>
</template>

<script setup lang="ts">
import { ref } from "vue";
import { useFooStore } from "../store/module/Foo";
import { useRouter } from "vue-router";

const fooStore = useFooStore();
const router = useRouter();

interface props { 
  value?: string;
};

defineProps<props>();

const abc = ref("123123");

const onStoreChange = () => { 
  fooStore.setFooValue("Aaron");
};

const onGoToAbout = () => { 
  router.push({
    name: "About"
  })
};
</script>

报错内容如下:

TypeError: Cannot read property 'push' of undefined

  29 |
  30 | const onGoToAbout = () => { 
> 31 |   router.push({
     |          ^
  32 |     name: "About"
  33 |   })
  34 | };

你再试试在测试文件的顶部添加以下 mock:

jest.mock("vue-router", () => {
  const realModule = jest.requireActual("vue-router");
  const mockRouter = {
    ...realModule,
    useRouter: () => ({
      push: (route: any) => {
        mockRouter.currentRoute.value = route;
      },
      currentRoute: {
        value: null,
      },
    }),
  };
  return mockRouter;
});

接下来,修改测试用例以使用新的 mock 方法:

import { shallowMount } from "@vue/test-utils";
import Foo from "@/components/Foo.vue";
import { useRouter } from "vue-router";

test("Foo.vue GoAbout", async () => {
  const wrapper = shallowMount(Foo);

  const oBtn1 = wrapper.find("#btn1");
  await oBtn1.trigger("click");

  const router = useRouter();
  expect(router.currentRoute.value.name).toBe("About");
});

添加mock

jest.mock('vue-router', () => ({
  useRouter: () => ({
    push: jest.fn()
  }),
}));
Vue3 + @vue/test-utils@next + VueRouter4 + Jest 单元测报错?
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. JK下载官网所有资源来源于开发团队,加入会员即可下载使用!如有问题请联系右下角在线客服!
2. JK下载官方保障所有软件都通过人工亲测,为每位会员用户提供安全可靠的应用软件、游戏资源下载及程序开发服务。
3. JK开发团队针对会员诉求,历经多年拥有现今开发成果, 每款应用程序上线前都经过人工测试无误后提供安装使用,只为会员提供安全原创的应用。
4. PC/移动端应用下载后如遇安装使用问题请联系右下角在线客服或提交工单,一对一指导解决疑难。

JK软件下载官网 技术分享 Vue3 + @vue/test-utils@next + VueRouter4 + Jest 单元测报错? https://www.jkxiazai.com/1206.html

JK软件应用商店是经过官方安全认证,保障正版软件平台

相关资源

官方客服团队

为您解决烦忧 - 24小时在线 专业服务