Mock : 테스트 코드에서는 mock이라는 것을 사용한다.
mock의 형태는 기본적으로 객체지만, 배열, 함수 등의 형태도 있다.
mock이라는 것은 실제 개발 코드 중 테스트 대상을 테스트 코드 버전으로 만든 거라고 보면 된다.
예를 들어 테스트하고 싶은 개발 코드가 함수라면, 그것을 테스트 코드에 쓰려고 했을 시 해당 함수는 mock 함수가 된다.
그렇게 사용될 mock은 추적, 호출, 시뮬레이션을 하며 개발 코드를 테스트 코드로서 구현하는데 쓰인다.
Mock : 가짜객체..
가 맞지만 너무 사전적인 정의라고 생각되기에
야금야금 공부하며 느낀? 파악한? 내용을 내 방식대로 끄적여봤다.
jest.fn() : mock으로 만듦(spy와 mock 둘 다 만드는데, spy는 추적 기능, mock은 시뮬레이션 기능을 말함)
괄호 안 인자 값을 통해 새로운 mock을 생성
jest.spyOn() : 괄호의 인자 값 안에 spy를 심는다.
둘의 공통점은 mocking 한다는 것이고,
차이점은 완전히 새로운 mock 함수를 만드는 것 (jest.fn())과 원래 메서드를 유지하며 호출,추적한다는 것 (jest.spyOn())
뭔가 비슷한 듯 다른게 헷갈리기 쉬워 보인다.
기본&주요 메서드
expect(value) : 비교할 값1
.toBe(value) : 비교할 값2, 예상값과 결과값(비교할 값 1과 2)이 일치하는지 비교 + 객체 인스턴스 비교시 인스턴스 ID까지 비교하여 더 엄격하게 검증
.not.method() : 뒤에 붙는 메서드 안에 넣은 값이 틀리는지 검증(성공), 대부분의 메서드에 not을 써도 된다고 한다.
.toEqual(value) : 예상값과 결과값이 일치하는지 비교
.toStrictEqual({obj}) : 객체끼리 비교
.toMatchObject({obj}) : 객체의 class까지 다를때 쓰는 메서드
.toHaveBeenCalledTimes(number) : mock이 몇번 호출되었는지 검증
.mockImplementation(()=> {}) : 괄호안의 함수로 갈아끼워서 리턴값을 바꿈(함수 내부 구현을 바꿈)
.mockImplementationOnce(()=> {}) : 괄호안의 함수로 갈아끼워서 한번만 리턴값을 바꿈(함수 내부 구현을 바꿈)
.mockReturnValue() : 괄호안의 값으로 리턴값을 지정
비동기
콜백 함수 테스트
에러 테스트
spy 초기화 : 초기화할 대상.mock메서드()
사실 목표에 대한 동기부여가 아예 없어서 그런 지 1달 정도의 시간 동안 게을러지긴 했었다.
머리로는 계속해야 된다는 생각을 하고 있었지만, 행동은 반대로 나가는
이를 해결하기 위해 해야 되는 것은 생각보단 행동 먼저 하기로 했다.
생각을 하면 할수록 생각이 많아지고, 그로 인해 실천력이 떨어졌기 때문이다.
에너지는 당연히 동기부여가 있을 때보단 떨어지긴 하지만, 그래도 아무것도 안 하는 것보단
천천히 한 발자국이라도 내딛는 게 당연히 나으니까..