-
단위 테스트 - Header 컴포넌트테스트/단위 테스트 (Vue) 2021. 9. 7. 16:27
단위 테스트 - Header 컴포넌트
Header.vue
<template> <header> <Logo /> <div class="nav nav-pills"> <div v-for="nav in navigations" :key="nav.name" class="nav-item"> <!-- vue 라우터에서는 라우터 링크라는 컴포넌트를 제공 --> <!-- a 태그를 대체해서 조금 더 효율적으로 페이지를 관리 --> <RouterLink :to="nav.href" active-class="active" :class="{ active: isMatch(nav.path) }" class="nav-link"> {{ nav.name }} </RouterLink> </div> </div> <div class="user" @click="toAbout"> <img :src="image" :alt="name" /> </div> </header> </template>
<script> import { mapState } from 'vuex' import Logo from '~/components/Logo' export default { components: { Logo }, data() { return { navigations: [ { name: 'Search', href: '/' }, { name: 'Movie', href: '/movie/tt4520988', path: /^\/movie/ // '/movie' }, { name: 'About', href: '/about' } ] } }, computed: { ...mapState('about', [ 'image', 'name' ]) }, methods: { isMatch(path) { if (!path) return false console.log(this.$route) return path.test(this.$route.fullPath) }, toAbout() { this.$router.push('/about') } } } </script> ...
Header.test.js
import { shallowMount } from '@vue/test-utils' import router from '~/routes' import store from '~/store' import Header from '~/components/Header' describe('components/Header.vue', () => { let wrapper // 각각의 테스트가 동작하기 직전에 실행 beforeEach(async () => { // window.scrollTo를 모의 함수로 동작하는 것처럼 구성 window.scrollTo = jest.fn() // 페이지 이동 router.push('/movie/tt1234567') // 페이지 기다림 await router.isReady() // Header 컴포넌트 연결 wrapper = shallowMount(Header, { global: { plugins: [ router, store ] } }) }) // 각각의 테스트 함수 내부에서는 고유한 환경으로 테스트가 동작해야 함 test('경로 정규표현식이 없는 경우 일치하지 않습니다', () => { const regExp = undefined expect(wrapper.vm.isMatch(regExp)).toBe(false) }) test('경로 정규표현식과 일치해야 합니다', () => { const regExp = /^\/movie/ expect(wrapper.vm.isMatch(regExp)).toBe(true) }) test('경로 정규표현식과 일치하지 않아야 합니다', () => { const regExp = /^\/ITBlue/ expect(wrapper.vm.isMatch(regExp)).toBe(false) }) })
참고
https://next.vue-test-utils.vuejs.org/guide/advanced/vue-router.html
Testing Vue Router | Vue Test Utils for Vue 3 (2.0.0-rc.14)
Testing Vue Router This article will present two ways to test an application using Vue Router: Using the real Vue Router, which is more production like but also may lead to complexity when testing larger applicationsUsing a mocked router, allowing for more
next.vue-test-utils.vuejs.org
'테스트 > 단위 테스트 (Vue)' 카테고리의 다른 글
단위 테스트 - Movie 컴포넌트 (0) 2021.09.09 단위 테스트 - Search 컴포넌트 (0) 2021.09.08 단위 테스트 - mount 와 shallowMount (0) 2021.09.07 단위 테스트 - VTU 테스트 및 API (0) 2021.09.07 단위 테스트 - 모의(Mock) 함수 (0) 2021.09.05