테스트코드의 소중함을 절실하게 느끼는 요즘... 그만큼 테스트코드 짜는 일도 많아졌습니다.
테스트코드를 작성하면서 다양한 상황을 마주하는데요,
그중 처음 만났을때 가장 당혹스러운 경우는 바로 import해서 쓰고 있는 함수를 mock하는 법입니다.
(그러니까... 테스트하고자 하는 함수가 다른 모듈에서 불러와 사용하고 있는 함수)
거두절미하고 바로 예시를 봅시다.
여기 외부 세계 서버와 소통하는 module.js 파일 내의 getByCallExternalApi 함수가 있습니다.
그리고 myGet.js 파일 내의 get 이라는 함수가 해당 함수를 불러와 사용하고 있는 상황입니다.
// module.js
const { callExternalApi } = require('./api');
const getByCallExternalApi = () => {
return callExternalApi();
};
module.exports = { getByCallExternalApi };
// myGet.js
const { getByCallExternalApi } = require('module'); // or require('../module'), by any means...
const get = () => {
return getByCallExternalApi();
};
module.exports = { get };
이제 테스트코드를 짜봅시다.
// myGet.spec.js
describe('get', () => {
const { get } = require('./myGet');
const { getByCallExternalApi } = require('module');
// mock!!!!
jest.mock('module');
getByCallExternalApi.mockReturnValueOnce('test return value');
it('should succeed', () => {
const result = get();
expect(result).toBe('test return value');
expect(getByCallExternalApi.mock.calls.length).toBe(1);
});
it('should fail', () => {
const result = get(); // failed result
expect(getByCallExternalApi.mock.calls.length).toBe(1);
//👆🏻이번엔 실패했으므로 여전히 총 1번밖에 불리지 않음
});
});
[node]대용량 데이터 처리에 필수적인 stream 이해하기 (2) | 2021.11.28 |
---|---|
null과 undefined와 none에 대한 이야기 (0) | 2021.07.21 |
Int의 1000 단위마다 ',' 찍어주는 코드 (0) | 2020.11.04 |
callback 함수 활용하기 / 자바스크립트 (0) | 2020.09.16 |
console 객체 이용 / 자바스크립트 (0) | 2020.07.23 |
댓글 영역