본문 바로가기
WIKI 기술 지식 베이스

테스트 데이터로 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);  });});

더 알아보기 (Learn more)