jest unit test 예제
타겟소스
/util/source.js
[code]
// 값 비교용
exports.addOne = function (a) {
return parseFloat(a) + 1
}
// 객체 비교용
exports.getUser = (id) => ({
id,
email: `${id}@gmail.com`,
})
// 비동기 함수
exports.fetchUser = (id, cb) => {
setTimeout(() => {
console.log(‘wait 0.1 sec.’)
const user = {
name: id,
email: id + ‘@test.com’,
}
cb(user)
}, 100)
}
// Promise 함수
exports.fetchPromise = (id) => {
return new Promise((resolve) => {
setTimeout(() => {
console.log(‘wait 0.1 sec.’)
const user = {
name: id,
email: id + ‘@test.com’,
}
resolve(user)
}, 100)
})
}
[/code]
테스트소스
/test/test.js
[code]
const { addOne, getUser, fetchUser, fetchPromise } = require(‘../utils/source’)
// toBe: 값(상수)이 일치하는지 테스트
test(‘인수가 숫자인 경우’, () => {
expect(addOne(1)).toBe(2)
expect(addOne(7)).toBe(8)
})
test(‘인수가 문자인 경우’, () => {
expect(addOne(‘1’)).toBe(2)
expect(addOne(‘7’)).toBe(8)
})
// 값(객체)가 일치하는지 테스트
test(‘user 확인’, () => {
expect(getUser(‘hacktam’)).toEqual({
id: ‘hacktam’,
email: ‘[email protected]’,
})
})
// 비동기 함수 테스트
test(‘비동기 확인’, (done) => {
fetchUser(‘hacktam’, (user) => {
expect(user).toEqual({
name: ‘hacktam’,
email: ‘[email protected]’,
})
done()
})
})
// Promise 함수 테스트: return 으로 Promise 를 돌려줘야 함
test(‘Promise 확인’, () => {
return fetchPromise(‘hacktam’).then((user) => {
expect(user).toEqual({
name: ‘hacktam’,
email: ‘[email protected]’,
})
})
})
// async/await 함수 테스트
test(‘Async 확인’, async () => {
const user = await fetchPromise(‘hacktam’)
expect(user).toEqual({
name: ‘hacktam’,
email: ‘[email protected]’,
})
})
/* 목업함수 */
// 상수값을 리턴하는 목업함수 사용
const MockFn1 = jest.fn()
MockFn1.mockReturnValue(‘Hello’)
test(‘Mockup 함수 테스트’, () => {
const value = MockFn1()
expect(value).toBe(‘Hello’)
})
// Promise를 리턴하는 목업함수 사용
const MockFn2 = jest.fn()
MockFn2.mockResolvedValue(‘Hi’)
test(‘Mockup Promise 함수 테스트’, () => {
return MockFn2().then((value) => {
expect(value).toBe(‘Hi’)
})
})
// 즉석으로 생성해낸 목업함수 사용
const MockFn3 = jest.fn()
MockFn3.mockImplementation((name) => `I am ${name}`)
test(‘Mockup 실제함수 생성 테스트’, () => {
const name = MockFn3(‘Brian’)
expect(name).toBe(‘I am Brian’)
})
[/code]
[출처 : 핵탐]