로메오의 블로그

[React Native] Jest - Api 테스트 [Jest Mock Api 사용하기] 본문

App & OS/Hybrid

[React Native] Jest - Api 테스트 [Jest Mock Api 사용하기]

romeoh 2019. 6. 17. 04:42
반응형

서버에서 받을 데이터를 Mock 데이터로 테스트 해보겠습니다.

 

데이터는 Facebook의 react-native 레퍼지토리에 있는 json 파일을 이용해 보겠습니다.

 

주소는 http://facebook.github.io/react-native/movies.json

{
  "title": "The Basics - Networking",
  "description": "Your app fetched this from a remote endpoint!",
  "movies": [
    { "id": "1", "title": "Star Wars", "releaseYear": "1977" },
    { "id": "2", "title": "Back to the Future", "releaseYear": "1985" },
    { "id": "3", "title": "The Matrix", "releaseYear": "1999" },
    { "id": "4", "title": "Inception", "releaseYear": "2010" },
    { "id": "5", "title": "Interstellar", "releaseYear": "2014" }
  ]
}

 

API 서비스 만들기

/src/Users.js

export default class Users {

    // 모든 사용자를 읽어온다.
    static all = () => {
        return fetch('http://facebook.github.io/react-native/movies.json', {})
            .then(res => {
                return res.json()
            })
    }
}

 

실제 API 데이터 사용하기

/src/Home.js

import React, { Component } from 'react';
import {
    View,
} from 'react-native';
import Users from './src/Users'

export default class App extends Component {

    componentDidMount(){

        // User API를 사용한다.
        Users.all().then(res => {
            console.log(res)
        })
    }
    
    render() {
        return (
            <View />
        );
    }
}

 

App 실행하기

$ react-native run-android

300

에뮬레이터에서 Command + m (windows는 Ctrl + m) 을 누르고

Debug JS Remotly를 활성화 합니다.

크롬 console에 json 결과값을 확인할 수 있습니다.

 

Mock API Test 코드 작성하기

/__test__/MockApi-test.js

import Users from '../src/Users';

it('회원 id는 35 이다', async () => {
    
    // global.fetch를 jest의 mock으로 오버라이드 한다.
    global.fetch = jest.fn().mockImplementation(() => {
        return new Promise((resolve, reject) => {
            resolve({
                json: () => {
                    return {
                        id: 35
                    }
                }
            })
        })
    })

    const allUser = await Users.all()
    expect(allUser.id).toBe(35)
});

 

Test Code 실행하기

$ npm test MockApi-test.js

Test가 Pass 된 것을 확인 할 수 있습니다.

 

fetch API가 jest mock으로 대체 되었기 때문에

테스트 코드에서 API 데이터를 mock 값으로 자유롭게 넣어서 Element를 테스트할 수 있습니다.

 

반응형
Comments