서비스 테스트 (사용 중단)
서비스는 주로 다음을 사용하여 테스트해야 합니다 API 테스트, 즉 DB와 API를 모킹한 상태로 외부 의존성을 두고 서비스를 실행하여, 서비스의 API를 통해 서비스 코드를 검증하는 테스트 집합입니다. 단위 테스트 코드의 유틸리티 섹션처럼 검증해야 할 경우의 수가 많거나 성능이 좋지 않아 API 테스트로는 테스트할 수 없거나 어렵게 만드는 코드가 발견된 경우 포함해야 합니다. 이에 대한 이유는 마이크로서비스 아키텍처로 인해 책임이 줄어들어 테스트해야 할 코드량이 감소하고, 서비스 로직이 단순하기 때문에, 서비스가 올바르게 동작하는지 확인할 때 API 테스트가 시간 대비 가치가 가장 높은 선택이기 때문입니다.
테스트 스택
서비스는 다음을 사용하여 테스트해야 합니다 Jest 를 주요 테스트 프레임워크로 사용하고 supertest 를 서버를 구성하고 테스트하는 프레임워크로 사용합니다.
디렉터리 구조
서비스에는 API 테스트와 단위 테스트가 모두 있을 수 있으므로, 테스트가 들어갈 위치도 하나 이상이 됩니다:
단위 테스트는 테스트 대상 파일 또는 모듈과 같은 위치에, 같은 이름으로 두되 확장자는
spec.ts로ts.대신 작성해야 합니다. API 테스트는 서비스 전체의 코드를 검증하므로, 반드시
test디렉터리, 즉 루트 경로에 배치해야 합니다. 파일은 테스트할 서비스 리소스의 이름을 따서 이름이 지정됩니다. 즉, API 테스트가 리소스books를 테스트한다면, 보통/books아래에 있고, 파일 이름은 반드시books.spec.ts이어야 하며 반드시test디렉터리에 배치되어야 합니다.
무엇을 테스트할지
라우트에 적용된 미들웨어(auth 등)가 라우트가 예상대로 동작하는지 확인합니다.
컨트롤러 로직이 우리가 기대하는 대로 라우트가 동작하는지 확인합니다.
API 테스트 서비스
앞서 언급했듯이, API 테스트는 Jest와 supertest를 사용하여 수행됩니다.
개발자가 API 테스트를 어떻게 작성하는지 보여주기 위해 다음 예시를 살펴보겠습니다:
예시에서 서로 다른 HTTP 메서드, GET과 POST를 사용하는 하나의 라우트를 볼 수 있습니다. 두 엔드포인트는 모두 같은 리소스인 books를 참조하므로, 이름이 books.spec.ts 인 파일을 test 디렉터리 아래에 생성하여 해당 테스트를 담아야 합니다.
모든 라우트와 다양한 실행 흐름은 철저하게 테스트해야 합니다. 개발자가 이러한 엔드포인트에 대해 테스트해야 하는 경우는 다음과 같습니다:
모든 책을 요청하면 200과 모든 책 목록을 반환하며 동작합니다.
특정 저자의 모든 책을 요청하면 200과 해당 저자의 모든 책 목록을 반환하며 동작합니다.
인증되지 않은 상태로 책을 게시하면 실패하고, 401과 오류 메시지를 반환합니다.
인증된 상태로 책을 게시하면 동작하고, 200을 반환하며 책을 삽입합니다.
이 사례들은 분명 그들의 its와 그 it에 대한 기대값에는 최소한 기대 응답 상태 그리고 무엇이 응답 본문에 예상되는지 (있는 경우).
이 엔드포인트 테스트를 작성하는 방법은 다음과 같습니다:
마지막 업데이트