테스트 데이터로 OpenAPI 스펙 검증
OpenAPI 스펙 검증은 @backstage/backend-openapi-utils/testUtils의 wrapServer로 테스트 서버를 감싸서 수행해요. 이 프록시는 테스트 중 모든 요청과 응답을 가로채 OpenAPI 스펙과 대조해 검증해요.
출처: 문서
본문
테스트 케이스를 이용한 OpenAPI 검증
OpenAPI 스펙 검증은 @backstage/backend-openapi-utils/testUtils의 wrapServer로 테스트 서버를 감싸서 수행해요. 이 프록시는 테스트 중 모든 요청과 응답을 가로채 OpenAPI 스펙과 대조해 검증해요.
검증 오류가 발견되면 다음 중 하나로 해결할 수 있어요.
- 스펙을 직접 수정하기. 보통 요청 본문이나 응답 본문 변경과 관련돼요.
- 테스트 케이스가 완전히 채워진 반환 값을 사용하도록 수정하기.
여기 완전한 예시가 있어요.
import { wrapServer } from '@backstage/backend-openapi-utils/testUtils';import express from 'express';import type { Server } from 'node:http';import request from 'supertest';import { createRouter } from './router';describe('createRouter', () => { let app: Server; beforeAll(async () => { const router = await createRouter(); app = await wrapServer(express().use(router)); }); // Bad: the empty object won't satisfy the required properties in the spec, // causing the OpenAPI validation proxy to fail the test. it('should not use an empty mock', async () => { const entity: Entity = {} as any; app.get('/test', () => { return entity; }); const response = await request(app).get('/test'); expect(response.body).toEqual(entity); }); // Good: all required properties are present, so the response matches the // spec and validation passes. it('should return a valid entity', async () => { const entity: Entity = { apiVersion: 'a1', kind: 'k1', metadata: { name: 'n1' }, }; app.get('/test', () => { return entity; }); const response = await request(app).get('/test'); expect(response.body).toEqual(entity); });});