jest 사용법

위처럼 함수 호출해서 인수 확인, 반환값 확인, 호출 순서 확인을 할 수 있다.
mockImplementation으로 반환값을 지정할 수도 있다.
1. invocationCallOrder: mock 함수가 호출된 순서를 나타내는 배열입니다.
- 모든 mock 함수 호출의 순서를 추적합니다.
2. mockClear(): mock 함수의 호출 기록, 인수, 반환값, 인스턴스 등을 초기화합니다.
- 예: mockFn.mockClear()
3. mockReset(): mockClear()와 유사하지만, mock 함수의 초기 구현도 제거합니다.
- 예: mockFn.mockReset()
4. mockRestore(): mock 함수의 초기 상태로 복원합니다. jest.spyOn()으로 감시한 메서드에 대해서는 원래 메서드로 복원합니다.
- 예: mockFn.mockRestore()
5. mockImplementation(fn): mock 함수의 구현을 설정합니다.
- 예: mockFn.mockImplementation(() => 'mocked return')
6. mockImplementationOnce(fn): mock 함수의 다음 호출에 대한 구현을 설정합니다.
- 예: mockFn.mockImplementationOnce(() => 'mocked return')
7. mockReturnValue(value): mock 함수의 반환값을 설정합니다.
- 예: mockFn.mockReturnValue('default value')
8. mockReturnValueOnce(value): mock 함수의 다음 호출에 대한 반환값을 설정합니다.
- 예: mockFn.mockReturnValueOnce('specific value')
9. mockName(name): mock 함수에 이름을 설정합니다.
- 예: mockFn.mockName('myMockFunction')
위 같은 추가 속성도 있다고 한다.
jest.fn() vs jest.spyOn()


위 블로그 예시처럼 google auth를 호출하는 코드가 service layer에 작성되어 있다고 가정할 때,
이런 코드는 spyOn보다는 mock으로 작성해야한다는 것입니다.
테스트는 API 서버가 다운된 상황이거나 Network이 단절된 환경에서 실행되면 오류가 발생하고 실패하게 됩니다. 따라서 위 두 개의 테스트 함수는 “테스트는 deterministic 해야한다. (언제 실행되든 항상 같은 결과를 내야한다.)”라는 원칙에 위배됩니다. 왜냐하면 단위 테스트가 단독으로 고립되어 있지 않고, 외부 환경에 의존하기 때문이라고 합니다.
요약
Mock:
• 원래 함수 구현을 사용하지 않고 완전히 덮어씌우고자 할 때 사용합니다.
• 예: 외부 API 호출이나 데이터베이스 접근을 모킹하여 테스트할 때.
• jest.fn()을 사용합니다.
Spy:
• 함수의 원래 구현을 유지하면서 호출 여부, 호출된 인수 등을 감시하고자 할 때 사용합니다.
• 또는 특정 함수의 구현을 일시적으로 교체하고 싶을 때 사용합니다.
• 예: 종속된 함수가 실제로 호출되었는지, 어떤 인수로 호출되었는지 확인할 때.
• jest.spyOn()을 사용합니다.
참고
https://www.daleseo.com/jest-fn-spy-on/
Jest의 jest.fn(), jest.spyOn()를 이용한 함수 모킹
Engineering Blog by Dale Seo
www.daleseo.com
https://medium.com/@eklavya_/jest-spy-vs-mock-when-to-use-what-60b8720f3ed0
Jest Spy vs Mock — when to use what!
If you are stuck with Jest Spying and mocking and not sure of when to use which one of these, this is your blog!
medium.com
jest 사용법

위처럼 함수 호출해서 인수 확인, 반환값 확인, 호출 순서 확인을 할 수 있다.
mockImplementation으로 반환값을 지정할 수도 있다.
1. invocationCallOrder: mock 함수가 호출된 순서를 나타내는 배열입니다.
- 모든 mock 함수 호출의 순서를 추적합니다.
2. mockClear(): mock 함수의 호출 기록, 인수, 반환값, 인스턴스 등을 초기화합니다.
- 예: mockFn.mockClear()
3. mockReset(): mockClear()와 유사하지만, mock 함수의 초기 구현도 제거합니다.
- 예: mockFn.mockReset()
4. mockRestore(): mock 함수의 초기 상태로 복원합니다. jest.spyOn()으로 감시한 메서드에 대해서는 원래 메서드로 복원합니다.
- 예: mockFn.mockRestore()
5. mockImplementation(fn): mock 함수의 구현을 설정합니다.
- 예: mockFn.mockImplementation(() => 'mocked return')
6. mockImplementationOnce(fn): mock 함수의 다음 호출에 대한 구현을 설정합니다.
- 예: mockFn.mockImplementationOnce(() => 'mocked return')
7. mockReturnValue(value): mock 함수의 반환값을 설정합니다.
- 예: mockFn.mockReturnValue('default value')
8. mockReturnValueOnce(value): mock 함수의 다음 호출에 대한 반환값을 설정합니다.
- 예: mockFn.mockReturnValueOnce('specific value')
9. mockName(name): mock 함수에 이름을 설정합니다.
- 예: mockFn.mockName('myMockFunction')
위 같은 추가 속성도 있다고 한다.
jest.fn() vs jest.spyOn()


위 블로그 예시처럼 google auth를 호출하는 코드가 service layer에 작성되어 있다고 가정할 때,
이런 코드는 spyOn보다는 mock으로 작성해야한다는 것입니다.
테스트는 API 서버가 다운된 상황이거나 Network이 단절된 환경에서 실행되면 오류가 발생하고 실패하게 됩니다. 따라서 위 두 개의 테스트 함수는 “테스트는 deterministic 해야한다. (언제 실행되든 항상 같은 결과를 내야한다.)”라는 원칙에 위배됩니다. 왜냐하면 단위 테스트가 단독으로 고립되어 있지 않고, 외부 환경에 의존하기 때문이라고 합니다.
요약
Mock:
• 원래 함수 구현을 사용하지 않고 완전히 덮어씌우고자 할 때 사용합니다.
• 예: 외부 API 호출이나 데이터베이스 접근을 모킹하여 테스트할 때.
• jest.fn()을 사용합니다.
Spy:
• 함수의 원래 구현을 유지하면서 호출 여부, 호출된 인수 등을 감시하고자 할 때 사용합니다.
• 또는 특정 함수의 구현을 일시적으로 교체하고 싶을 때 사용합니다.
• 예: 종속된 함수가 실제로 호출되었는지, 어떤 인수로 호출되었는지 확인할 때.
• jest.spyOn()을 사용합니다.
참고
https://www.daleseo.com/jest-fn-spy-on/
Jest의 jest.fn(), jest.spyOn()를 이용한 함수 모킹
Engineering Blog by Dale Seo
www.daleseo.com
https://medium.com/@eklavya_/jest-spy-vs-mock-when-to-use-what-60b8720f3ed0
Jest Spy vs Mock — when to use what!
If you are stuck with Jest Spying and mocking and not sure of when to use which one of these, this is your blog!
medium.com