Simulasi Vue-Router menggunakan Vue-Test-Utils dan Vitest
P粉190883225
2023-08-25 09:26:52
<p>Saya cuba memahami logik mengejek Vue-Router dengan Vitest. </p>
<p>Untuk melakukan ini, saya cuba menyediakan dan mensimulasikan persekitaran ujian saya pada projek yang sangat mudah. Apabila saya cuba mengikuti dokumentasi rasmi Vue-Test-Utils, saya sentiasa mendapat ralat. Saya tidak tahu sama ada kerana mereka menggunakan Jest. </p>
<p>Menggunakan vue-router sebenar telah menyelesaikan masalah saya, tetapi saya fikir mengejek vue-router adalah lebih baik. </p>
<p> Di bawah saya akan mula-mula menyampaikan kod sumber projek, dan kemudian ralat yang saya terima. </p>
<h3>Home.vue</h3>
<pre class="brush:php;toolbar:false;"><script setup lang="ts">
import {onMounted} dari "vue";
import {useRoute} daripada "vue-router";
laluan const = useRoute()
onMounted(() => {
console.log(route.query)
})
</skrip>
<template>
<div>Rumah</div>
</template></pre>
<h3>首页.spec.ts</h3>
<pre class="brush:php;toolbar:false;">import {expect, it, vi} daripada "vitest";
import {mount} daripada "@vue/test-utils";
import Laman Utama daripada "../src/components/Home.vue"
it('Ujian Rumah', async () => {
pembungkus const = mount(Home)
expect(wrapper.exists()).toBeTruthy()
})</pre>
<h3>vite.config.ts</h3>
<pre class="brush:php;toolbar:false;">/// <reference types="vitest" />
import { defineConfig } daripada 'vite'
import vue daripada '@vitejs/plugin-vue'
// https://vitejs.dev/config/
eksport defineConfig lalai ({
pemalam: [vue()],
ujian: {
persekitaran: 'jsdom',
termasuk: ['./test/**/*.spec.ts'],
kecualikan: ['node_modules', 'dist'],
globals: benar
}
})</pre>
<h3>我的错误消息如下:..</h3>
<h3>我尝试过的方法</h3>
<p>我尝试像下面这样模拟 vue-router</p>
<pre class="brush:php;toolbar:false;">vi.mock('vue-router', () => ({
useRoute: vi.fn(),
}))</pra>
<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} daripada "vitest";
import {mount} daripada "@vue/test-utils";
import Laman Utama daripada "../src/components/Home.vue"
vi.mock('vue-router')
it('Ujian Rumah', async () => {
pembungkus const = mount(Home, {
global: {
tunas: ["pautan-penghala", "paparan-penghala"]
}
})
expect(wrapper.exists()).toBeTruthy()
})</pre></p>
Pertama sekali, saya berharap dalam
Home.vue
中看到router-link
或router-view
:Jadi,
Home.spec.ts
sepatutnya kelihatan seperti ini:Beberapa komen/cadangan:
.spyOn()
和.mockImplementation...()
untuk pemantauan dan simulasi.toHaveBeenCalled...()
untuk menyemak sama ada simulasi berfungsi seperti yang diharapkanmount()
函数中的存根应与模板中使用的组件相关(因此,如果您不使用
, ia tidak sepatutnya disenaraikan sebagai rintisan)Semoga ini membantu, sorakan!