使用 Vue-Test-Utils 和 Vitest 進行 Vue-Router 模擬
P粉190883225
2023-08-25 09:26:52
<p>我試著理解用 Vitest 模擬 Vue-Router 的邏輯。 </p>
<p>為此,我嘗試在一個非常簡單的專案上設定並模擬我的測試環境。當我嘗試按照Vue-Test-Utils的官方文件進行操作時,總是出現錯誤。我不知道是不是因為他們使用 Jest。 </p>
<p>使用真正的 vue-router 解決了我的問題,但我認為模擬 vue-router 更好。 </p>
<p>下面我先傳達一下專案的源碼,然後是我收到的錯誤。 </p>
<h3>首頁.vue</h3>
<pre class="brush:php;toolbar:false;"><script setup lang="ts">
import {onMounted} from "vue";
import {useRoute} from "vue-router";
const route = useRoute()
onMounted(() => {
console.log(route.query)
})
</script>
<template>
<div>Home</div>
</template></pre>
<h3>首頁.spec.ts</h3>
<pre class="brush:php;toolbar:false;">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()
})</pre>
<h3>vite.config.ts</h3>
<pre class="brush:php;toolbar:false;">/// <reference types="vitest" />
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
}
})</pre>
<h3>我的錯誤訊息如下:..</h3>
<h3>我嘗試過的方法</h3>
<p>我嘗試像下面這樣模擬 vue-router</p>
<pre class="brush:php;toolbar:false;">vi.mock('vue-router', () => ({
useRoute: vi.fn(),
}))</pre>
<p>或只是</p>
<pre class="brush:php;toolbar:false;">vi.mock('vue-router')</pre>
<h4>這是我的最終 Home.spec.ts 檔案</h4>
<pre class="brush:php;toolbar:false;">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()
})</pre></p>
首先,我希望在
Home.vue
中看到router-link
或router-view
:因此,
Home.spec.ts
應該是這樣的:一些評論/建議:
.spyOn()
和.mockImplementation...()
進行監視和模擬.toHaveBeenCalled...()
檢查模擬是否如預期運作mount()
函數中的存根應與範本中使用的元件相關(因此,如果您不使用
,它不應該被列為存根)希望有幫助, 乾杯!