Jest 오류
테스트 함수와 테스트 케이스에 몇 가지 문제가 있어 보입니다. 여러가지 수정을 통해 이를 해결할 수 있습니다.
테스트 함수에서 router.post를 호출하고 있다. 하지만 이 함수는 실제로 테스트하는 것이 아니라 라우팅 로직 자체를 실행하는 것이다. Jest에서 테스트를 위해서는 요청(request)과 응답(response) 객체를 가짜(mock)로 만들어 사용해야 합니다.
expect 함수를 사용하여 테스트를 실행할 때, 테스트 함수가 비동기 작업을 수행하므로 async/await를 사용해야 합니다.
expect(emailTest()).toBe(res.render('validation.ejs'));는 테스트의 방식이 잘못되었습니다. Jest에서는 expect 함수에 비교하고자 하는 값만 전달하면 됩니다.
emailTest 함수 내부에서 transporter 객체를 사용하는 부분이 주석 처리되어 있습니다. 주석 처리된 코드를 활성화해야 실제로 이메일 전송이 이루어집니다.
다음은 수정된 코드의 예시입니다:
jest.fn()은 Jest에서 제공하는 모의 함수(Mock Function)를 생성하는 함수입니다
호출 여부 확인: toBeCalled, toHaveBeenCalledTimes, toHaveBeenCalledWith 등을 사용하여 함수가 호출되었는지, 몇 번 호출되었는지, 어떤 인자와 함께 호출되었는지 등을 확인할 수 있습니다.
반환 값 설정: mockReturnValue, mockReturnValueOnce 등을 사용하여 모의 함수의 반환 값을 설정할 수 있습니다.
구현: mockImplementation, mockImplementationOnce 등을 사용하여 모의 함수의 구현을 제공할 수 있습니다.
json에서는 주석 못씀
테스트 코드는 서버 내부 api만으로 실행 > 결과 값 도출 이 가능하도록 설계해야 함. 외부 api를 받아와 테스트하는 것은 매우 바람직하지 않음.