Pinia와 Vue3 통합 테스트
한 가지 해결책은 구성 요소가 탑재할 때 저장소에 의존하지 않도록 코드를 리팩터링하는 것입니다. 그러나 그것은 너무 많은 작업이 될 것이고 우리 코드베이스에 너무 제한적일 것입니다. 구성 요소 수명 주기 후크의 저장소에 대한 액세스를 제한할 필요가 없습니다!
따라서 이 게시물에서는 통합 테스트를 위해 특별히 설계된 래퍼 구성 요소 내부에 구성 요소를 렌더링하는 또 다른 솔루션이 제시됩니다.
IntegrationTestWrapper.vue
<script setup lang="ts">
import { useMyStore } from '@/stores/myStore'
// === setup any Pinia stores here ===
useMyStore().$patch({ foo: 'bar' })
// ======
defineProps(['Component'])
</script>
<template lang="pug">
component(:is="Component")
</template>
그런 다음 테스트 내부에서 다음과 같이 작성할 수 있습니다.
MyComponent.spec.ts
import { flushPromises, mount } from '@vue/test-utils'
import { createPinia } from 'pinia'
describe('MyComponent', () => {
it('should mount', async () => {
const wrapper = await mount(IntegrationTestWrapper, {
props: {
Component: MyComponent,
anotherProp: 'abc', // will be passed to child component
},
global: {
plugins: [createPinia()], // initializes Pinia
},
})
await flushPromises() // make sure all promises in lifecycle hooks are resolved
expect(wrapper.exists()).toBe(true)
// further assertions
})
})
이제 모든 것이 올바른 순서로 수행됩니다.
IntegrationTestWrapper
가 마운트되기 전에 Pinia가 생성되고 초기화됩니다. IntegrationTestWrapper
마운트하기 전에 저장소 상태를 초기화합니다MyComponent
. IntegrationTestWrapper
에게 주어진 소품은 MyComponent
에게 전달됩니다. 메모:
IntegrationTestWrapper
는 소품을 받지 않기 때문에 slot을 렌더링하지 않습니다. createPinia()
를 호출할 수 없습니다. Pinia가 app.use()
로 초기화되지 않았다는 오류가 표시됩니다. 마운트 옵션을 통한 테스트에서만 초기화됩니다. Reference
이 문제에 관하여(Pinia와 Vue3 통합 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/peerhenry/integration-testing-vue3-with-pinia-36p1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)