Saya cuba memahami logik mengejek Vue-Router dengan Vitest.
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.
Menggunakan vue-router sebenar telah menyelesaikan masalah saya, tetapi saya fikir mengejek vue-router adalah lebih baik.
Di bawah saya akan mula-mula menyampaikan kod sumber projek, dan kemudian ralat yang saya terima.
Go to home
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: '' }, 'router-view': { template: '' }, }, }, }); 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!