jest.spyOn(object, method)
jest.spyOn은 특정 객체안에 담긴 메소드를 가짜로 대체하지 않고 그 호출 여부, 호출 방식 등의 정보를 활용하기 위해 사용한다. 첫 번째 인자로 객체를, 두 번째 인자로 메소드 명을 전달해주면 해당 메소드의 Jest 가짜 함수(mock function)가 반환된다. 그렇기 때문에 반환된 함수는 expect와 함께 toBeCalled와 같이 호출 관련 정보를 테스트하거나 혹은 더 나아가서 mockReturnValue, mockmockImplementation 등의 mock function 메소드를 통해 그 내부를 바꿔칠 수 있다.
바로 이 점에서 jest.spyOn이 빛을 발한다. 그냥 jest.fn( )을 활용하여 가짜 함수를 생성한 후 직접 객체의 메소드에 대입하는 방식은 window 객체의 경우 적용할 수 없다. (window 객체에 프로퍼티를 대입할 수 없기 때문이다.) 하지만 jest.spyOn과 mock function 메소드를 결합하여 사용한다면 window를 포함한 다양한 객체의 메소드를 mocking할 수 있다.
두 가지 예시를 가져와봤다. 첫 번째 예시는 jest.spyOn을 통해 window.confirm의 모킹 함수를 만들어준 뒤 그 반환값을 true로 고정함으로써 window.confirm문이 포함된 코드에서 확인 버튼을 눌렀을 때의 프로세스를 검사해줄 수 있다. 두 번째 예시는 window.location.reload를 jest.fn( )을 통해 형성한 가짜 함수로 바꿔치기하는 코드이다. 스프레드 연산을 통해 reload를 제외한 window.location의 모든 프로퍼티를 유지한 채로 reload만 jest.fn( )을 통해 바꿔치기한 후 window.location.get의 반환값, 즉 window.location으로 처리될 값을 mockReturnValue를 통해 가짜 mockedLocation으로 지정해준다.
'프론트엔드 기본개념 복습 > 테스트코드' 카테고리의 다른 글
[Jest] TypeError : animate is not a function (0) | 2022.04.17 |
---|---|
[Jest] 비동기 코드 테스트하기 (Jest testing with Asynchronous codes) (0) | 2022.04.14 |
[Jest] ReferenceError:`jest.mock()` is not allowed to reference any out-of-scope variables. (0) | 2022.04.13 |
[Jest] jest.fn( )과 유닛 테스트 모킹 (Mocking in Unit Test) (0) | 2022.04.13 |