CAKE20

AI Web PaaS

테스트

API, job과 task를 시작 전에 에디터에서 검증합니다.

API, Job과 Task 테스트

  • API는 config 객체에 filter와 유효한 sample을 함께 작성합니다.
  • 테스트 실행은 config.sample을 실제 요청 데이터처럼 handler에 전달합니다.
  • *.job.ts 파일은 Queue 대기와 재시도 없이 handler를 즉시 시험합니다.
  • *.task.ts 파일은 예약 시간을 기다리지 않고 handler를 즉시 시험합니다.
  • server/tasks 파일은 선택만으로 검사하거나 실행하지 않습니다.
  • *.ws.ts와 *.sse.ts는 테스트 실행을 누를 때만 테스트 웹사이트 endpoint에 연결해 결과를 표시합니다.
  • auth가 true인 SSE와 WebSocket 테스트는 테스트 웹사이트의 로그인 세션을 그대로 요구하며 에디터가 인증을 우회하지 않습니다.
  • 콘솔에는 wrapper 정보가 아닌 handler의 실제 반환값만 표시됩니다.
  • 지원 코드는 저장할 때 내부 Oxfmt 규칙을 자동 적용하며 테스트는 실행하지 않습니다.
  • 저장 시 Oxlint 오류와 shared/Prisma 생성 결과를 함께 확인합니다.
  • 관리자 저장소의 scripts/build/build-check는 lint, TypeScript와 runtime 단위 테스트를 실행합니다.

Bun 단위 테스트

server 아래 어디서든 *.test.ts 파일을 만들 수 있습니다. 파일을 선택하고 테스트 실행을 누르면 그 파일 하나만 즉시 실행합니다.

검수를 누르면 build/debug Runtime을 준비한 뒤 모든 *.test.ts를 실행합니다. 하나라도 실패하면 검수 웹사이트를 WEB PREVIEW 런타임 모드에 표시하지 않습니다. 검수는 공용 DB를 사용하므로 테스트가 데이터를 변경한다면 테스트 코드가 직접 정리해야 합니다.

test, expect와 Runtime의 fetchGet·fetchPost는 자동으로 제공됩니다. 상대 API 주소는 테스트 웹사이트로 연결되며 메서드, 경로, 요청·응답과 검증 결과를 테스트 콘솔에 자동으로 표시합니다. fetchGet·fetchPost는 웹사이트의 클라이언트와 서버에서도 같은 상대 주소로 사용할 수 있습니다.

// server/api/example.test.ts
const config = {
  active: true,
  describe: "API",
  timeout: 2_000
}

export default () => {
  test("웹사이트 상태를 응답한다", async () => {
    const data = await fetchGet<{ state: string }>("/api/status")

    expect(data).toMatchObject({
      state: "running"
    })
  })
}