728x90
반응형
모의 함수 (Mock Functions)
모의 함수를 사용하면 함수의 실제 구현을 지우고
함수에 대한 호출 및 해당 호출에서 전달된 매개변수를 캡쳐하고
new 로 인스턴스화 될 때 생성자 함수의 인스턴스를 캡쳐하여 값을 반환한다.......?
모의 함수를 사용하는 두 가지 방법
- 테스트 코드에서만 사용할 모의 함수를 생성하여 사용하거나
- Manual Mocks 를 작성하여 모듈 종속성을 재정의 한다
모의 함수 생성하여 사용
const mockCallback = jest.fn(x => 42 + x); // 모의 함수
test('forEach mock function', () => {
forEach([0, 1], mockCallback);
// The mock function was called twice
expect(mockCallback.mock.calls).toHaveLength(2);
// The first argument of the first call to the function was 0
expect(mockCallback.mock.calls[0][0]).toBe(0);
// The first argument of the second call to the function was 1
expect(mockCallback.mock.calls[1][0]).toBe(1);
// The return value of the first call to the function was 42
expect(mockCallback.mock.results[0].value).toBe(42);
});
.mock property
모든 모의 함수에는 함수가 호출된 방법과 함수가 반환한 내용에 대한 데이터를 보관하는 특수 속성 .mock
이 있다
.mock 속성은 각 호출에 대한 this 값도 추적하므로 다음과 같이 테스트할 수도 있다
const myMock1 = jest.fn();
const a = new myMock1();
console.log(myMock1.mock.instances);
// > [ <a> ]
const myMock2 = jest.fn();
const b = {};
const bound = myMock2.bind(b);
bound();
console.log(myMock2.mock.contexts);
// > [ <b> ]
mock property 는 함수가 어떻게 호출되고 인스턴스화되는지 또는 반환되는 내용을 확인하는 테스트에서 매우 유용하다
Mock Return Values
모의 함수를 사용하여 테스트 중 테스트 값을 코드에 주입할 수도 있다
const myMock = jest.fn();
console.log(myMock());
// > undefined
myMock.mockReturnValueOnce(10).mockReturnValueOnce('x').mockReturnValue(true);
console.log(myMock(), myMock(), myMock(), myMock());
// > 10, 'x', true, true
Mock functions 은 함수형 프로그래밍의 continuation-passing style 코드에서도 효과적이다
실제 동작을 재현하기 위해 필요한 복잡한 과정을 피할 수 있다
const filterTestFn = jest.fn();
// Make the mock return `true` for the first call,
// and `false` for the second call
filterTestFn.mockReturnValueOnce(true).mockReturnValueOnce(false);
const result = [11, 12].filter(num => filterTestFn(num));
console.log(result);
// > [11]
console.log(filterTestFn.mock.calls[0][0]); // 11
console.log(filterTestFn.mock.calls[1][0]); // 12
반응형
댓글