我试图理解用 Vitest 模拟 Vue-Router 的逻辑。
为此,我尝试在一个非常简单的项目上设置并模拟我的测试环境。当我尝试按照Vue-Test-Utils的官方文档进行操作时,总是出现错误。我不知道是不是因为他们使用 Jest。
使用真正的 vue-router 解决了我的问题,但我认为模拟 vue-router 更好。
下面我先传达一下项目的源码,然后是我收到的错误。
Home
import {expect, it, vi} from "vitest"; import {mount} from "@vue/test-utils"; import Home from "../src/components/Home.vue" it('Home Test', async () => { const wrapper = mount(Home) expect(wrapper.exists()).toBeTruthy() })
///import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' // https://vitejs.dev/config/ export default defineConfig({ plugins: [vue()], test: { environment: 'jsdom', include: ['./test/**/*.spec.ts'], exclude: ['node_modules', 'dist'], globals: true } })
我尝试像下面这样模拟 vue-router
vi.mock('vue-router', () => ({ useRoute: vi.fn(), }))
或者只是
vi.mock('vue-router')
import {expect, it, vi} from "vitest"; import {mount} from "@vue/test-utils"; import Home from "../src/components/Home.vue" vi.mock('vue-router') it('Home Test', async () => { const wrapper = mount(Home, { global: { stubs: ["router-link", "router-view"] } }) expect(wrapper.exists()).toBeTruthy() })
首先,我希望在
Home.vue
中看到router-link
或router-view
:因此,
Home.spec.ts
应该是这样的:一些评论/建议:
.spyOn()
和.mockImplementation...()
进行监视和模拟.toHaveBeenCalled...()
检查模拟是否按预期工作mount()
函数中的存根应与模板中使用的组件相关(因此,如果您不使用希望有帮助, 干杯!