Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Docs : jest mock기법 #198

Closed
unchaptered opened this issue Sep 23, 2022 · 1 comment
Closed

Docs : jest mock기법 #198

unchaptered opened this issue Sep 23, 2022 · 1 comment
Labels
documentation 기술 및 에러 해결 문서

Comments

@unchaptered
Copy link
Member

unchaptered commented Sep 23, 2022

1. 서론

위 이슈에서 언급하고 있듯이, 협력자 들의 의존성을 제거하기 위해서 격리 를 해야 합니다.
이러한 격리를 위한 기법 중에서 가장 대표적인 것이 mock 입니다.
해당 이슈는 그러한 mock 관련된 이슈를 모으고 있습니다.

추가적으로 다른 jest 기법이 궁금하시다면 다음 Issue 를 확인해주세요.

2. CLass Mock

저희 팀은 거의 모든 기능 공급자를 Class 로 구현하였습니다.
따라서 Class Mock 을 중점적으로 다루고자 하며, 이에 따라 다음과 같은 방식을 사용하였습니다.

모든 격리 기법은 export defualt 를 전제로 작성되었으며, export 의 경우 다른 방식으로 작성해야 할 것입니다.
실제 내용은 직접 코드를 타이핑하

2.1. automated mock

대역 으로 만들고 싶은 클래스가 export default 를 통해서 내보내기 되었을 때, 다음과 같이 automated-mock 이 작동합니다.

jest.mock("~/상대경로/file-name.ts");

다만, microsoft/TypeScript - wiki/Performance 에 일반적으로 export default 와 import 의 사용이 빌드 성능을 저하시킬 수 있는 우려 라는 구절이 있습니다. 이에 따라서, 되도록이면 automated-mock 을 사용하는 것은 빌드 측면 에서 그렇게 좋은 선택이 아닐 것 같습니다.

자세한 내용은 tsc 성능 튜닝과 관련된 다음 이슈를 확인해주세요.

2.2. manual mock

대역 으로 만들고 싶은 클래스가 export 를 통해서 내보내기 되었거나, 일부 프로퍼티 만 대역으로 교체하고 싶을 때가 있을 것입니다.

이러한 경우, 다음과 같이 manual mock 을 통해서 모킹할 수 있습니다.

jest.mock(
   "~/상대경로/file-name.ts",
   () => {
      return({
         메서드명: jest.fn() // 혹은 mockMethod
      })
   }
)

단, 이러한 경우 테스트 파일의 최상단으로 호이스팅 이 일어납니다.
따라서, *.test.ts 파일의 최상단 스코프에 여러 개의 describe 나 it 이 존재할 경우, 사이드 이펙트 발생의 위험성이 있습니다.

참고자료

환경 설정

OS: Windows 10
Node:  v16.15.1 (@unchaptered), v16.13.1(@axisotherwise)
npm : v8.11.0 (@unchaptered), v8.2.2 (@axisotherwise)
@unchaptered unchaptered added the documentation 기술 및 에러 해결 문서 label Sep 23, 2022
@unchaptered unchaptered changed the title Docs : jest Mocking 기법 Docs : jest mock기법 Sep 23, 2022
@unchaptered
Copy link
Member Author

오랜 시간 PR 에 작성이 되지 않아서, PR 을 닫아두겠습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation 기술 및 에러 해결 문서
Projects
None yet
Development

No branches or pull requests

1 participant