ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 단위 테스트 - 모의(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 서버에서 받아오는 것과 동일한 결과값을 반환

    - 서버에서 데이터를 가져오지 못하는 경우에도 테스트를 진행할 수 있게 된다

    댓글

Designed by Tistory.