반응형
단위 테스트는 최소한의 단위를 최소한의 시간을 드려서 하는게 좋다
따라서 시간이 걸리는 로직을 단순화 시키는데 이때 사용 되는것이 모의 함수 이다.
기존 코드
example.js
// export 키워드를 붙여서 외부에서 테스트할수 있도록 설정
export function double(num) {
// num 데이터가 없는 경우
if(!num) {
return 0
}
return num * 2
}
// 기본값은 최대 5초 따라서 그 이상은 test코드 부분에서 설정해주어야 한다.
export function asyncFn() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('Done!')
}, 5000)
})
}
example.test.js
import { asyncFn } from './example';
describe('비동기 테스트', () => {
test('async/await', async () => {
const res = await asyncFn()
expect(res).toBe('Done?')
}, 7000)
})
모의함수로 변경
example.test.js
import * as example from './example';
describe('비동기 테스트', () => {
test('async/await', async () => {
// 모의함수
jest.spyOn(example, 'asyncFn').mockResolvedValue('Done!')
const res = await example.asyncFn()
expect(res).toBe('Done!')
}, 7000)
})
결과 확인 -> 시간이 단축된것을 확인할 수 있다.
영화검색및 문자변경 테스트 예제
example.js 파일에 함수 추가
import axios from 'axios'
import _upperFirst from 'lodash/upperFirst'
import _toLower from 'lodash/toLower'
export async function fetchMovieTitle() {
// 겨울왕국2 데이터 가져오기
const res = await axios.get('https://omdbapi.com?apikey=7035c60c&i=tt4520988')
return _upperFirst(_toLower(res.data.Title)) // Frozen II => Frozen ii
}
example.test.js
import axios from 'axios'
import { fetchMovieTitle } from './example'
describe('비동기 테스트', () => {
test('영화 제목 변환', async () => {
// 모의 함수 생성
axios.get = jest.fn(() => {
return new Promise(resolve => {
resolve({
// 모의 데이터 생성
data: {
Title: 'Frozen II'
}
})
})
})
const title = await fetchMovieTitle()
expect(title).toBe('Frozen ii')
})
})
네트워크 연결을 끊은상태에서 주석처리를 안하면 정상처리 가능
모의 함수를 주석 처리 하고 연결을 끊으면 실패
반응형
'프론트엔드 > 단위 테스트' 카테고리의 다른 글
VTU API 공식 문서 사이트 (0) | 2022.01.23 |
---|---|
VTU 첫 테스트 및 에러 해결(버전 문제) (0) | 2022.01.21 |
비동기 테스트 (0) | 2022.01.19 |
Jest Matchers 이해 (0) | 2022.01.18 |
Jest Globals (0) | 2022.01.17 |