mock
1.동사 (특히 흉내를 내며) 놀리다[조롱하다] (=make fun of)
2.동사 격식 무시[경시]하다
3.형용사 거짓된, 가짜의 (=sham)✅
4.형용사 격식 모의의
Mocking을 하는 목적은 우리가 컨트롤 할 수 없는 무엇인가를 대체하기 위함이다.
Jest의 모킹 함수를 만드는 가장 쉬운 방법은 jest.fn()을 사용하는 것이다.
test('기본적으로 Undefined를 반환합니다.', () => {
const mock = jest.fn();
const result = mock('foo');
expect(result).toBeUndefined();
expect(mock).toHaveBeenCalled();
expect(mock).toHaveBeenCalledTimes(1);
expect(mock).toHaveBeenCalledWith('foo');
});
Return Value와 구현부, Promise로도 변경이 가능합니다.
또한 한번만 모킹 함수를 사용할 수 있도록 할 수도 있습니다.
test('기본적으로 Undefined를 반환합니다.', () => {
const mock = jest.fn();
const result = mock('foo');
expect(result).toBeUndefined();
expect(mock).toHaveBeenCalled();
expect(mock).toHaveBeenCalledTimes(1);
expect(mock).toHaveBeenCalledWith('foo');
});
test('모의 구현', () => {
const mock = jest.fn((val) => 'bar');
expect(mock('foo')).toBe('bar');
expect(mock).toHaveBeenCalledWith('foo');
});
test('모의 구현 V2', () => {
const mock = jest.fn().mockImplementation((val) => 'bar');
const result = mock('foo');
expect(result).toBe('bar');
expect(mock).toHaveBeenCalledWith('foo');
});
test('모의 구현 한 번만 사용하기', () => {
const mock = jest.fn().mockImplementationOnce((val) => 'bar');
const result = mock('foo');
expect(result).toBe('bar');
expect(mock).toHaveBeenCalledWith('foo');
const result2 = mock('baz');
expect(result2).toBe(undefined);
expect(mock).toHaveBeenCalledWith('baz');
});
test('반환 값 모킹하기', () => {
const mock = jest.fn();
mock.mockReturnValue('bar');
const result = mock('foo');
expect(result).toBe('bar');
expect(mock).toHaveBeenCalledWith('foo');
});
test('Promise 모킹하기', () => {
const mock = jest.fn();
mock.mockResolvedValue('bar');
const result = mock('foo');
expect(result).resolves.toBe('bar');
expect(mock).toHaveBeenCalledWith('foo');
});
테스트의 목적은 개발 중인 시스템에 대한 확신을 가지기 위함이다.
모킹을 많이 할 수록 원래의 시스템 기능에서 벗어날 가능성이 높아진다. 모킹하는 것에 대한 편차가 존재하기 때문이다. 그렇기에, 적절한 시점에 모킹하기 적합한 것을 선정하는 것이 중요하다.