컨트랙트 테스팅
GitLab에서 컨트랙트 테스트를 작성하고 실행하는 방법과 테스트 스위트 폴더 구조 및 명명 규칙을 설명합니다.
컨트랙트 테스트는 컨슈머(consumer) 테스트와 프로바이더(provider) 테스트의 두 부분으로 구성됩니다. 컨슈머와 프로바이더 관계의 간단한 예시는 프론트엔드와 백엔드 사이의 관계입니다. 프론트엔드가 컨슈머이고 백엔드가 프로바이더입니다. 프론트엔드는 백엔드가 제공하는 API를 소비합니다. 이 테스트는 두 측이 합의된 컨트랙트를 따르도록 보장하며, 컨트랙트에서 벗어나는 경우 의미 있는 대화를 유도하여 브레이킹 체인지(breaking change)가 그냥 통과되지 않도록 합니다. 컨슈머 테스트는 단위 테스트와 유사하며, 각 스펙은 요청과 예상되는 목(mock) 응답을 정의한 후 해당 정의를 기반으로 컨트랙트를 생성합니다. 프로바이더 테스트는 통합 테스트와 유사합니다. 각 스펙은 컨트랙트에 정의된 요청을 실제 서비스에 실행하고, 컨트랙트와 응답을 비교하여 유효성을 검증합니다. 기존 컨트랙트 테스트는 다음 경로에서 확인할 수 있습니다: spec/contracts/consumer/specs — 컨슈머 테스트 spec/contracts/provider/pact_helpers — 프로바이더 테스트 컨트랙트 파일 자체는 현재 /spec/contracts/contracts 에 저장되어 있습니다. 향후 AWS에 호스팅된 PactBroker 또는 이와 유사한 서비스를 사용할 계획입니다. 테스트 작성 # 컨슈머 테스트 작성 프로바이더 테스트 작성 컨슈머 테스트 실행 # 컨슈머 테스트를 실행하기 전에 spec/contracts/consumer 로 이동하여 npm install 을 실행하세요. 모든 컨슈머 테스트를 실행하려면 npm run jest:contract -- /specs 를 실행하면 됩니다. 특정 스펙 파일만 실행하려면 /specs 대신 해당 스펙 파일명을 입력하면 됩니다. 컨슈머 테스트를 실행하면 프로바이더 테스트가 실제 API 동작을 검증하는 데 사용할 컨트랙트가 생성됩니다. 프로젝트 루트 디렉터리에서도 yarn jest:contract 명령어를 사용하여 테스트를 실행할 수 있습니다. 프로바이더 테스트 실행 # 프로바이더 테스트를 실행하기 전에 GDK(GitLab Development Kit)가 완전히 설정되어 실행 중인지 확인하세요. 설정 방법은 GDK 리포지터리 에 있는 설정 안내를 참조하세요. 프로바이더 테스트를 실행하려면 ./lib/tasks/contracts 에 있는 Rake 태스크를 사용합니다. 프로바이더 테스트 관련 Rake 태스크 목록을 확인하려면 bundle exec rake -T contracts 를 실행하세요. 예시: $ bundle exec rake -T contracts rake contracts:merge_requests:pact:verify:diffs_batch # Verify provider against the consumer pacts for diffs_batch rake contracts:merge_requests:pact:verify:diffs_metadata # Verify provider against