-
단위 테스트 - 모의(Mock) 함수테스트/단위 테스트 (Vue) 2021. 9. 5. 00:22
단위 테스트 - 모의(Mock) 함수 1
비동기함수
/* example.js */ export function asyncFn() { return new Promise(resolve => { setTimeout(() => { resolve('Done!') }, 6000) }) }
테스트
/* example.test.js */ import * as example from './example' describe('비동기 테스트', () => { test('async/await', async () => { // jest.spyOn(객체명, 메소드명) // asyncFn() 비동기 함수를 모의 함수로 만듬 // mockReselvedValue() 비동기로 실행이 되면 데이터를 반환 jest.spyOn(example, 'asyncFn') .mockResolvedValue('Done!') const res = await example.asyncFn() expect(res).toBe('Done!') }, 7000) })
- asyncFn() 함수는 6초 뒤에 데이터를 반환
- 테스트는 asyncFn() 함수를 기다리느라 최소 6초가 넘어가게 된다 (불필요)
- 모의 함수를 만들면 asyncFn() 함수를 모의로 만들어서 원하는 데이터만 반환
- 기다리지 않고 테스트를 진행할 수 있다
단위 테스트 - 모의(Mock) 함수 2
비동기함수
import axios from "axios"; import _upperFirst from 'lodash/upperFirst' import _toLower from 'lodash/toLower' export async function fetchMovieTitle() { const res = await axios.get('https://omdbapi.com?apikey=...&i=tt4520988') return _upperFirst(_toLower(res.data.Title)) // Frozen II => Frozen ii }
테스트
import axios from 'axios' import { fetchMovieTitle } from './example' describe('비동기 테스트', () => { test('영화 제목 변환', async () => { // jest.fn() 가짜 함수를 생성 axios.get = jest.fn(() => { return new Promise(resolve => { resolve({ data: { Title: 'Frozen II' } }) }) }) const title = await fetchMovieTitle() expect(title).toBe('Frozen ii') }) })
- fetchMovieTitle() 함수는 OMDB API 서버에서 영화 정보를 받아서 데이터를 가공 후 리턴
- 테스트는 실제 서버에 요청하는 부분까지 작성할 필요가 없다 (불필요)
- 서버에서 데이터를 가져오지 못하는 경우에는 테스트를 진행할 수 없게 된다
- 모의 함수를 만들어서 API 서버에서 받아오는 것과 동일한 결과값을 반환
- 서버에서 데이터를 가져오지 못하는 경우에도 테스트를 진행할 수 있게 된다
'테스트 > 단위 테스트 (Vue)' 카테고리의 다른 글
단위 테스트 - mount 와 shallowMount (0) 2021.09.07 단위 테스트 - VTU 테스트 및 API (0) 2021.09.07 단위 테스트 - 비동기 테스트 (0) 2021.09.04 단위 테스트 - Jest Matchers (0) 2021.09.04 단위 테스트 - Jest Globals (0) 2021.09.03