Vue-Test-Utils 및 Vitest를 사용한 Vue-Router 시뮬레이션
P粉190883225
2023-08-25 09:26:52
<p>Vue-Router를 Vitest로 조롱하는 논리를 이해하려고 노력 중입니다. </p>
<p>이를 위해 매우 간단한 프로젝트에서 테스트 환경을 설정하고 시뮬레이션해 보았습니다. Vue-Test-Utils의 공식 문서를 따르려고 하면 항상 오류가 발생합니다. 그들이 Jest를 사용하기 때문인지는 모르겠습니다. </p>
<p>실제 vue-router를 사용하면 문제가 해결되었지만 vue-router를 모의하는 것이 더 낫다고 생각합니다. </p>
<p> 아래에서는 먼저 프로젝트의 소스 코드를 전달한 다음 제가 받은 오류를 설명하겠습니다. </p>
<h3>Home.vue</h3>
<pre class="brush:php;toolbar:false;"><스크립트 설정 lang="ts">
"vue"에서 {onMounted}를 가져옵니다;;
"vue-router"에서 {useRoute}를 가져옵니다;;
const 경로 = useRoute()
onMounted(() => {
console.log(route.query)
})
</스크립트>
<템플릿>
<div>홈</div>
</템플릿></pre>
<h3>首页.spec.ts</h3>
<pre class="brush:php;toolbar:false;">"vitest"에서 {expect, it, vi}를 가져옵니다;;
"@vue/test-utils"에서 {mount}를 가져옵니다;;
"../src/comComponents/Home.vue"에서 홈을 가져옵니다.
it('홈 테스트', async () => {
const 래퍼 = 마운트(홈)
기대(래퍼.존재()).toBeTruthy()
})</pre>
<h3>vite.config.ts</h3>
<pre class="brush:php;toolbar:false;">/// <참조 유형="vitest" />
'vite'에서 { 정의 구성 } 가져오기
'@vitejs/plugin-vue'에서 vue 가져오기
// https://vitejs.dev/config/
기본 정의 구성 내보내기({
플러그인: [vue()],
시험: {
환경: 'jsdom',
포함: ['./test/**/*.spec.ts'],
제외: ['node_modules', 'dist'],
전역 : 사실
}
})</pre>
<h3>내가 좋아하는错误消息如下:..</h3>
<h3>내가 좋아하는 방법</h3>
<p>我尝试image下면这样模拟 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;">"vitest"에서 {expect, it, vi}를 가져옵니다;;
"@vue/test-utils"에서 {mount}를 가져옵니다.
"../src/comComponents/Home.vue"에서 홈을 가져옵니다.
vi.mock('vue-라우터')
it('홈 테스트', async () => {
const 래퍼 = 마운트(홈, {
글로벌: {
스텁: ["라우터-링크", "라우터-뷰"]
}
})
기대(래퍼.존재()).toBeTruthy()
})</pre></p>
우선,
에서 그러기를 바랍니다. 으아아아Home.vue
中看到router-link
或router-view
:따라서
으아아아Home.spec.ts
는 다음과 같아야 합니다.몇 가지 의견/제안:
.spyOn()
和.mockImplementation...()
를 사용하세요.toHaveBeenCalled...()
를 사용하여 시뮬레이션이 예상대로 작동하는지 확인하세요mount()
函数中的存根应与模板中使用的组件相关(因此,如果您不使用
스텁으로 기재하면 안 됩니다)도움이 되기를 바랍니다. 건배!