Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 인프런 멘토링
- Frontend
- 프론트엔드
- TDD
- React
- javascript
- CICD
- Reconsiliation
- virtual DOM
- jest
- Husky
- F-Lab 오티
- 비동기 테스트
- F-Lab
- 주간 회고
- github actions
- F-Lab 회고
- Jest Matchers
- 에프랩
- ESLint
- 패스트캠퍼스
- context api
- 모노레포
- 마이크로프론트엔드
- 데이터 타입
- 가상돔
- aws s3
- 패캠
- 전역 상태 관리
- Prettier
Archives
- Today
- Total
bytrustu tech blog
[Jest] Mock 본문
Jest Mock에 대해 알아보자
https://jestjs.io/docs/mock-functions
Mock Functions
실제 구현 된 함수를 Mock 함수로 대체하면 코드 간의 상호 작용이 쉽게 테스트 가능하다.
Jest에서 제공하는 mock 함수를 사용해서 테스트를 진행 할 수 있다.
toBeCalled: 함수가 호출 되었는지 테스트한다.
toHaveBeenCalledTimes: 함수가 n번 호출되었는지 테스트한다.
toHaveBeenCalledWith: 함수를 호출 했을때 결과를 테스트한다.
const check = (predicate, onSucess, onFailure) => {
if (predicate()) {
onSucess('yes');
} else {
onFailure('no');
}
}
module.exports = check;
describe('check 함수를 테스트 합니다.', () => {
let onSucess;
let onFailure;
beforeEach(() => {
onSucess = jest.fn();
onFailure = jest.fn();
});
it('predicate의 값이 true이면 onSuccess를 호출합니다.', () => {
check(() => true, onSucess, onFailure);
expect(onSucess).toBeCalled();
// expect(onSucess.mock.calls.length).toBe(1);
expect(onSucess).toHaveBeenCalledTimes(1);
// expect(onSucess.mock.calls[0][0]).toBe('yes');
expect(onSucess).toHaveBeenCalledWith('yes');
expect(onFailure).toHaveBeenCalledTimes(0);
});
it('predicate의 값이 false이면 onFailure를 호출합니다.', () => {
check(() => false, onSucess, onFailure);
expect(onSucess).toHaveBeenCalledTimes(0);
expect(onFailure).toHaveBeenCalledTimes(1);
expect(onFailure).toHaveBeenCalledWith('no');
});
})
mockImplementation
Mock 함수는 기본적으로 아무런 동작, 리턴을 하지 않는다.
.mockImplementation()은 Mock 함수를 즉석으로 구현할 수 있고, 동작하는 Mock 함수를 만들수 있다.
jest.mock('../messageService'); 와 같이 해당 파일을 mock으로 지정해주면 해당 내용 전체가 Mock 함수로 지정 된다.
const sendEmail = (email, message) => {
// 이메일 보내는 코드
}
const sendSMS = (phone, message) => {
// SMS 보내는 코드
}
module.exports = {
sendEmail,
sendSMS,
}
class ProductClient {
fetchItems() {
return fetch('http://example.com/login').then((response) => response.json());
}
}
module.exports = ProductClient;
const { register, unregister } = require('../userService');
const { sendEmail, sendSMS } = require('../messageService');
jest.mock('../messageService');
describe('userService를 테스트 합니다.', () => {
const user = {
email: 'bytrustu@gmail.com',
phone: '010-1234-5678',
};
test('register를 테스트 합니다.', () => {
register(user)
expect(sendEmail).toBeCalledTimes(1);
expect(sendEmail).toBeCalledWith(user.email, '회원가입을 축하합니다.');
expect(sendSMS).toBeCalledTimes(1);
expect(sendSMS).toBeCalledWith(user.phone, '회원가입을 축하합니다.');
});
test('unregister를 테스트 합니다.', () => {
unregister(user);
expect(sendEmail).toBeCalledTimes(1);
expect(sendEmail).toBeCalledWith(user.email, '회원탈퇴 되었습니다.');
expect(sendSMS).toBeCalledTimes(1);
expect(sendSMS).toBeCalledWith(user.phone, '회원탈퇴 되었습니다.');
});
});
'TDD' 카테고리의 다른 글
[Jest] 비동기 테스트 하기 (0) | 2022.12.19 |
---|---|
[Jest] Matchers 사용하기 (2) | 2022.12.18 |
[Jest] 초기 환경설정 (0) | 2022.12.17 |
Comments