이 포스트에 방문해주셔서 감사합니다.
포스트에 대한 비판, 의견, 공감하는 피드백은 언제나 환영입니다.
- 
모듈의 함수 mocking
doSomething1()함수를 테스트해야할 때,ctrl.js의doSomething1()함수가 같은 모듈의doSomething2()함수를 호출하고 있다면 아래와 같이하면 된다.- 
ctrl.js
exports.doSomething1 = (a) => { ... const result = exports.doSomething2(); }; - 
ctrl.test.jsjest.fn()이 있지만jest.spyOn()을 사용하면 모듈이 유무까지 확인할 수 있다.
const ctrl = require('./ctrl'); describe('ctrl', () => { afterEach(() => { // spyOn를 이용해서 만든 mock 함수가 // 다른 test에 영향이 가지 않도록 // 원래 모듈로 초기화 jest.restoreAllMocks(); }); describe('doSomething1', () => { test('...', () => { const doSomething2Mock = jest .spyOn(ctrl, 'doSomething2') .mockReturnedValue(1); const ret = ctrl.doSomething1(); ... }); }); }); 
 - 
 - 
모듈의 변수 mocking
module1.js의PREFIX변수를 mocking하면 아래와 같이 할 수 있다.- 
module1.js
exports.PREFIX = 'pre'; exports.doSomething = a => `${exports.PREFIX}_${a}`; - 
module1.test.js
describe('module', () => { describe('doSomething', () => { let oriPrefix; beforeAll(() => { oriPrefix = module1.PREFIX; }); afterAll(() => { module1.PREFIX = oriPrefix; }); test('test', () => { module1.PREFIX = '1'; ... }); }); }); 
 - 
 - 
비동기(Async/Await) 함수 테스트
ctrl.js의 비동기 함수인doSomething()를 테스트할 때 아래와 같이 하면된다.- 
ctrl.js
exports.doSomething = async () => {...}; - 
ctrl.test.js
const ctrl = require('./ctrl'); describe('ctrl', () => { describe('doSomething', () => { test('...', async () => { const result = await ctrl.doSomething(); ... }); }); }); 
 - 
 - 
콜백 함수(
res.json(), ...) 테스트콜백 함수가 포함된
ctrl.js의doSomething()함수를 테스트할 때 아래와 같이 하면된다.- 
ctrl.js
exports.doSomething = (e) => { e.on('stop', () => { ... }); }; - 
ctrl.test.js
const ctrl = require('./ctrl'); describe('ctrl', () => { describe('doSomething', () => { test('...', done => { const e = { on: jest.fn(() => { ... done(); }); }; ctrl.doSomething(e); }); }); }); 
 - 
 - 
throw new Error()테스트ctrl.js의doSomething()함수가 에러를 throw 하는 지 확인할 때 아래와 같이 하면된다.- 
ctrl.js
exports.doSomething = () => { throw new Error('?'); }; - 
ctrl.test.js
const ctrl = require('./ctrl'); describe('ctrl', () => { describe('doSomething', () => { test('...', () => { expect(() => ctrl.doSomething()).toThrow(Error); }); }); }); 
doSomething()함수가 비동기일 경우 에러를 throw하는 지 확인할 때는 아래와 같이 하면된다.- 
ctrl.js
exports.doSomething = async () => { ... throw Error('?'); }; - 
ctrl.test.js
const ctrl = require('./ctrl'); describe('ctrl', () => { describe('doSomething', () => { test('...', async () => { await expect(ctrl.doSomething()).toThrow(Error); }); }); }); 
 - 
 
    
Top comments (0)