00:16mock function은 실제가 아닌 흉내만 낸, 일종의 테스트용 함수라고 이해하기
00:27mock 함수를 사용하는 사례
userDB에서 userList를 select해오는 기능을 테스트해온다고 가정해보겠습니다.
1. 기능 구현을 위한 코드 작성이 번거롭습니다.
2. 네트워크, DB 환경 등 결과에 영향을 주는 외부 환경요인이 존재합니다.테스트는 같은 입력에 대해 같은결과를 내는 것이 중요한데 말이죠.
하지만 mock 함수로 userList를 받아온 것처럼 흉내내서 테스트를 진행한다면 위의 문제가 해소될 것입니다.
00:58mock 함수 사용법
1. jest.fn()으로 mock함수를 만들 수 있습니다.
2. mock함수.mock.calls를 활용하면 몇 번 호출됐는지, 호출될 때 전달된 인수는 무엇인가를 알아낼 수 있습니다.
06:326. mock함수의 return value를 미리 설정해놓고 활용하기
mockFn
.mockReturnValueOnce(true)
.mockReturnValueOnce(false)
.mockReturnValueOnce(true)
.mockReturnValueOnce(false)
.mockReturnValue(true)
를 미리 해놨기 때문에 filter 안에서 호출되는 mockFn(num)는 num에 상관없이 true, false, true, false, true 순으로 return 됩니다.
08:588. 외부의 함수를 활용할 때 실제 실행시키진 않고 정해진 return을 받는 방법(mocking module)
참고하기:
const fn = require("./fn");
jest.mock("./fn");
fn.createUser.mockReturnValue({name: "Mike"}); // 이렇게 함으로써 fn.createUser("Mike");의 return 값이 고정됨
11:379. 유용한 Matchers
참고하기:
const mockFn = jest.fn();
mockFn(10, 20);
mockFn();
mockFn(30, 40);
expect(mockFn).toBeCalled(); // mockFn이 한 번이라도 호출 되었는가?
expect(mockFn).toBeCalledTimes(3); // mockFn이 3번 호출되었는가?
expect(mockFn).toBeCalledWith(30,40); // mockFn이 30, 40을 인자로 받았던가?
expect(mockFn).lastCalledWith(10,20); // mockFn이 마지막 호출 때 10, 20을 인자로 받았던가?
해당 학습노트에서는 react router 버전6에서 redirect를 어떻게 구현하는지 소개합니다.
공식 문서: https://reactrouter.com/
00:50
react router 버전5에서 redirect를 구현하는 방법입니다.
*예상 시나리오: pathname이 '/redirect'인 page 접근 시 pathname '/about'인 page로 전환됨
*특정 pathname에 redirect 로직을 등록하는 이유는 가지각색이겠지만 그 중 대표적인 용도는 로그인 여부 검사입니다. 서비스를 이용하는 유저가 로그인을 했을 경우 특정 pathname에 접근하지 못하도록 사용하는 것이죠.