Vue.js에서 테스트를 작성하는 방법은 무엇인가요?
_____A1: Vue.js 테스트는 주로 단위 테스트(Unit Test), 컴포넌트 테스트, 통합 테스트로 나누며, 보통 Jest나 Mocha 같은 테스트 러너와 Vue Test Utils 라이브러리를 사용해 작성합니다. Vue Test Utils는 Vue 컴포넌트를 마운트하고 상호작용을 시뮬레이션하며 렌더링 결과를 검증하는 데 도움을 줍니다.
Q2: Vue Test Utils란 무엇이고 왜 사용하는가요?
A2: Vue Test Utils는 Vue 컴포넌트를 테스트하기 위한 공식 유틸리티 라이브러리입니다. 컴포넌트를 마운트하고 props 전달, 이벤트 발생, DOM 검사, 자식 컴포넌트 탐색 등 다양한 테스트 작업을 간편하게 할 수 있도록 도와줍니다.
Q3: 단순한 Vue 컴포넌트 테스트 예시는 어떻게 작성하나요?
A3: 예를 들어, 버튼 클릭 시 카운터가 1 증가하는 컴포넌트 테스트는 다음과 같습니다.
```javascript
import { mount } from '@vue/test-utils'
import CounterButton from '@/components/CounterButton.vue'
test('버튼 클릭 시 카운터 증가', async () => {
const wrapper = mount(CounterButton)
expect(wrapper.text()).toContain('0')
await wrapper.find('button').trigger('click')
expect(wrapper.text()).toContain('1')
})
```
Q4: Vue 컴포넌트의 props를 테스트하려면 어떻게 해야 하나요?
A4: `mount` 함수에 `props` 옵션을 전달하면 됩니다.
```javascript
const wrapper = mount(MyComponent, {
props: { msg: 'Hello Vue!' }
})
expect(wrapper.text()).toContain('Hello Vue!')
```
Q5: 이벤트 핸들링을 테스트하려면?
A5: `wrapper.find(selector).trigger('event')`를 사용해 DOM 이벤트를 트리거하거나, `$emit`으로 컴포넌트 이벤트 발생을 검증합니다.
```javascript
await wrapper.find('button').trigger('click')
expect(wrapper.emitted()).toHaveProperty('submit')
```
Q6: 비동기 작업이 포함된 컴포넌트는 어떻게 테스트하나요?
A6: 이벤트 트리거 후 `await nextTick()`을 사용하거나, `async/await` 패턴으로 상태 변화를 기다린 후 결과를 검증합니다.
```javascript
await wrapper.find('button').trigger('click')
await nextTick()
expect(wrapper.text()).toContain('Updated')
```
Q7: Vuex 스토어나 Vue Router와 함께 테스트할 때 팁이 있나요?
A7: 테스트 시 스토어나 라우터 인스턴스를 실제 컴포넌트에 주입해야 하므로, `global.plugins` 옵션에 스토어나 라우터를 전달합니다.
```javascript
import { createStore } from 'vuex'
const store = createStore({ ... })
mount(MyComponent, {
global: {
plugins: [store]
}
})
```
Q8: 스냅샷 테스트는 어떻게 하나요?
A8: Jest와 함께 사용하며, `toMatchSnapshot()`을 호출해 컴포넌트 렌더링 결과를 저장하고 비교합니다.
```javascript
const wrapper = mount(MyComponent)
expect(wrapper.html()).toMatchSnapshot()
```
Q9: 컴포넌트에 포함된 외부 API 호출을 테스트하려면 어떡하나요?
A9: Axios 등 외부 호출은 Jest의 mock 함수로 대체하거나, `jest.mock()`을 사용해 네트워크 호출을 가로채고 원하는 응답을 주입해 테스트합니다.
Q10: 테스트 코드 구조나 모범 사례가 있나요?
A10:
- 각 테스트는 독립적이어야 하며 `beforeEach`로 상태 초기화.
- 테스트 설명은 명확하고 구체적으로 작성.
- 컴포넌트의 public API(Props, Events, Slots)에 집중.
- 가능하면 로직은 유틸 함수로 분리해 단위 테스트.
- 너무 내부 구현에 의존하지 않고 사용자가 보는 결과 위주로 검증.
---
이처럼 Vue Test Utils + Jest 환경에서 컴포넌트를 마운트, 상호작용, DOM 검사, 상태 변경 등을 테스트하는 것이 Vue.js 테스트 작성의 기본 방법입니다.
작성자:
최은서 [비회원]
| 작성일자: 1년 전
2024-09-14 17:14:43
조회수: 134 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 134 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.