-
Jest 에서 callback 실행 테스트 해보기Javascript 2022. 1. 12. 07:55
기존에 처리하던 방식
this.setState(state, () => { this.props.requestAPI(); });
위의 코드가 있다고 하자.
기존에는 setState 함수를
jest.fn
으로 mock 시켜버리니, callback의 실행을 테스트할 방법이 없다고 생각했다.그래서
requestAPI
의 실행은 검증할 수 없었고, 아래와 같이 expect문을 작성하여 익명의 함수가 전달되었다는 테스트만 작성했다.expect(mockSetState).toBeCalledWith(state, expect.any(Function));
mockImplementaion 사용하기
혹시나 어떤 특별한 방법이 있을까? 하고 궁금하여
jest.fn how to run callback
이라고 구글에 검색했다.그런데.. 기존에 알고있던
mockImplementation
함수를 사용하여 아주 쉽게 테스트할 수 있었다.ClassToTest.prototype.setState = jest.fn().mockImplementation((state, callback) => { callback(); });
위와 같이
mockImplementation
함수를 통해 setState 함수의 구현을 재정의 해준다.코드를 보면 인자로 받은
callback
을 실행시킨다.그러면 Test에 의해 실행된 구현 코드는 실행당시에 setState 함수의 구현부를
(state, callback) => {callback()}
으로 인지하게되고, 그냥 인자로 받은 callback을 실행한다.
이제
expect(mockRequestAPI).toBeCalled();
이렇게 검증하면 callback의 실행여부를 검증할 수 있다.
반응형