Mock

  • 모의 함수는 함수의 실제 구현을 제거하고 함수 호출, 전달된 매개변수, 생성자 | 함수 인스턴스 등을 캡처하며 테스트 시 반환 값을 설정할 수 있게 한다.

  • 모의 함수는 코드 간의 연결을 테스트하는 데 사용된다.

Mock 사용 유형

  • 테스트 코드에서 사용할 모의 함수를 생성

  • 모듈 종속성을 재정의하기 위해 수동 모의를 작성

Mock 속성

  • 모든 모의 함수에는 .mock 속성이 있으며, 이 속성은 함수 호출 방식, 반환 값, this 값등을 저장한다.

  • mock.instances, mock.contexts, mock.calls, mock.results 등 다양한 속성을 통해 호출 정보를 검사할 수 있다.

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 반환 값

  • mock은 테스트 중 코드에 테스트 값을 주입하는 데도 사용할 수 있다.

[2] 이해 못함

모듈 Mock

  • 외부 모듈 (예: Axios)을 모의하여 실제 API 호출 없이 테스트할 수 있다.

  • jest.mock 함수를 사용하여 모듈을 모의하고, 필요한 반환 값을 설정한다.

부분 Mock !!!!!!!!!!!

  • 모듈의 일부만 Mock하고, 나머지는 실제 구현을 유지한다.

  • jest.requireActual을 사용하여 실제 모듈의 나머지 부분을 유지하면서 특정 부분만 모의한다.

export와 export default 모듈은 mock 방법이 다른 부분을 모르고 export 방식으로 통일하여 오류가 발생

Mock 완전 구현

모의 함수의 구현을 완전히 교체해야 하는 경우가 있다.

  • jest.fn 또는 mock 함수의 mockImplementationOnece, mockImplementation을 사용하여 Mock 함수의 구현을 설정할 수 있다.

  • 이는 복잡한 동작을 재현하거나 여러 호출에 대해 다른 결과를 생성해야 할 때 유용하다.

Jest.fn

mockImplementation

: mockImplementationOnce로 정의된 구현을 모두 소진하면 jest.fn으로 설정된 기본 구현이 실행된다.

체이닝된 메서드 모의

  • 체이닝된 메서드는 mockReturnThis()를 사용하여 this를 반환하도록 설정할 수 있다.

Mock 이름

  • mockName 메서드를 사용하여 모의 함수에 이름을 설정할 수 있으며, 이는 테스트 오류 출력에서 유용하다.

사용자 정의 매처

  • mock 함수 호출 방식을 단언하기 위한 사용자 정의 매처 함수가 있다.

  • toHaveBeenCalled, toHaveBeenCalledWith, toHaveBeenLastCalledWith,toMatchSnapshot등을 사용하여 함수 호출을 검사할 수 있다.

Last updated