vitest의 mocking vs spy
vi.mock(): 외부 API 호출, 데이터베이스 라이브러리(Axios, Prisma 등)처럼 실제 코드가 실행되면 안되는 무거운 의존성을 격리할 때 사용- 특징 :
vi.mock()은 JS 호이스팅(hoisting) 특성을 가진다.
- 특징 :
vi.spyOn(): 객체의 원래 기능은 그대로 실행하면서, 해당 메서드가 ‘몇 번 호출되었는지’, ‘어떤 인자가 넘어갔는지’ 호출 기록만 가로채서 검증할 때 사용한다.- 특징 : 테스트가 끝나고 원본 상태로 돌려놓기 매우 쉽기 때문에 오염(Pollution) 위험이 적다.
언제 무엇을 써야할까?
vi.mock()을 쓰는 상황- 네트워크 요청(Fetch)이나 DB 작업 등 실제 실행되면 안 되는 코드일 때
- 테스트하려는 대상이 함수가 아니라 서드파티 패키지(Module) 전체일 때
vi.spyOn()을 써야하는 상황- 외부 API가 아닌 내부 비즈니스 로직의 상호작용(호출 여부)만 검증하고 싶을 때
Date.now(), console.log 같은 전역/빌트인 객체의 동작을 추적하고 싶을 때- 특정 테스트 케이스 하나 안에서만 깔끔하게 모킹을 처리하고 싶을 때
- #TIL
- #Vitest