테스트/단위 테스트 (Vue)
단위 테스트 - 모의(Mock) 함수
IT Blue
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 서버에서 받아오는 것과 동일한 결과값을 반환
- 서버에서 데이터를 가져오지 못하는 경우에도 테스트를 진행할 수 있게 된다