Rumah > Soal Jawab > teks badan
P粉2949544472023-08-26 00:01:26
Pertama sekali, saya berharap dalam Home.vue
中看到 router-link
或 router-view
:
<script setup lang="ts"> import { onMounted } from 'vue'; import { useRoute } from 'vue-router'; const route = useRoute(); onMounted(() => { console.log(route.query); }); </script> <template> <router-link to="home">Go to home</router-link> <router-view /> </template>
Jadi, Home.spec.ts
sepatutnya kelihatan seperti ini:
import { expect, it, vi } from 'vitest'; import { mount } from '@vue/test-utils'; import * as VueRouter from 'vue-router'; import Home from '../src/components/Home.vue'; describe('./path/to/Home.vue', () => { const useRouteSpy = vi.spyOn(VueRouter, 'useRoute'); const getWrapper = () => mount(Home as any, { global: { stubs: { 'router-link': { template: '<div/>' }, 'router-view': { template: '<div/>' }, }, }, }); it('the component should be mounted', () => { // ARRANGE const useRouteMock = useRouteSpy.mockImplementationOnce({ query: 'query' }); // ACT const wrapper = getWrapper(); // ASSERT expect(useRouteMock).toHaveBeenCalled(); expect(wrapper.exists()).toBeTruthy(); }); });
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!