>웹 프론트엔드 >JS 튜토리얼 >Jest와 Supertest를 사용하여 REST API 테스트하기 ✅

Jest와 Supertest를 사용하여 REST API 테스트하기 ✅

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-28 20:36:11467검색

원본 게시: souvikinator.xyz

API 엔드포인트에 대한 단위 테스트를 설정하는 방법은 다음과 같습니다.

우리는 다음 NPM 패키지를 사용할 것입니다:

  • 서버용 Express(다른 프레임워크 사용 가능)
  • 농담
  • 슈퍼테스트

다음을 사용하는 VS 코드 확장:

  • 농담
  • 제스트러너

종속성 설치

npm install express
npm install -D jest supertest

디렉토리 구조는 다음과 같습니다.

Testing REST APIs using Jest and Supertest ✅

package.json을 잊지 마세요

{
  "name": "api-unit-testing",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "jest api.test.js",
    "start":"node server.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.18.1"
  },
  "devDependencies": {
    "jest": "^28.1.2",
    "supertest": "^6.2.3"
  }
}

간단한 익스프레스 서버 만들기

/post 엔드포인트에 본문과 제목이 있는 POST 요청을 수락하는 고속 서버입니다. 둘 중 하나라도 누락되면 상태 400 Bad Request가 반환됩니다.

// app.js
const express = require("express");
const app = express();

app.use(express.json());

app.post("/post", (req, res) => {
  const { title, body } = req.body;

  if (!title || !body)
    return res.sendStatus(400).json({ error: "title and body is required" });

  return res.sendStatus(200);
});

module.exports = app;
const app = require("./app");
const port = 3000;

app.listen(port, () => {
  console.log(`http://localhost:${port} ?`);
});

supertest와 함께 사용하기 위해 Express 앱을 내보냅니다. 다른 HTTP 서버 프레임워크에서도 동일한 작업을 수행할 수 있습니다.

테스트 파일 생성

// api.test.js
const supertest = require("supertest");
const app = require("./app"); // express app

describe("Creating post", () => {
    // test cases goes here
});

Supertest는 서버 운영과 요청을 대신 처리하고 우리는 테스트에 집중합니다.

express 앱은 supertest 에이전트로 전달되고 express를 임의의 사용 가능한 포트에 바인딩합니다. 그런 다음 원하는 API 엔드포인트에 HTTP 요청을 보내고 응답 상태를 예상과 비교할 수 있습니다.

 const response = await supertest.agent(app).post("/post").send({
        title: "Awesome post",
    body: "Awesome post body",
 });

3가지 사례에 대한 테스트를 만들겠습니다.

  1. 제목과 본문을 모두 제공하는 경우
  test("creating new post when both title and body are provided", async () => {
    const response = await supertest.agent(app).post("/post").send({
      title: "Awesome post",
      body: "Awesome post body",
    });

        // comparing response status code with expected status code
    expect(response.statusCode).toBe(200);
  });
  1. 둘 중 하나라도 누락된 경우
  test("creating new post when either of the data is not provided", async () => {
    const response = await supertest.agent(app).post("/post").send({
      title: "Awesome post",
    });

    expect(response.statusCode).toBe(400);
  });
  1. 둘 다 빠졌을 때
  test("creating new post when no data is not provided", async () => {
    const response = await supertest.agent(app).post("/post").send();

    expect(response.statusCode).toBe(400);
  });

최종 코드는 다음과 같습니다.

const supertest = require("supertest");
const app = require("./app"); // express app

describe("Creating post", () => {

  test("creating new post when both title and body are provided", async () => {
    const response = await supertest.agent(app).post("/post").send({
      title: "Awesome post",
      body: "Awesome post body",
    });
    expect(response.statusCode).toBe(200);
  });

  test("creating new post when either of the data is not provided", async () => {
    const response = await supertest.agent(app).post("/post").send({
      title: "Awesome post",
    });
    expect(response.statusCode).toBe(400);
  });

  test("creating new post when no data is not provided", async () => {
    const response = await supertest.agent(app).post("/post").send();
    expect(response.statusCode).toBe(400);
  });
});

테스트 실행

다음 명령을 사용하여 테스트를 실행하세요.

npm run test

Testing REST APIs using Jest and Supertest ✅

jest 및 jest runer와 같은 VS Code 확장을 사용하면 작업이 자동으로 수행됩니다.

Testing REST APIs using Jest and Supertest ✅

이것이 API 엔드포인트를 쉽게 테스트할 수 있는 방법입니다. ?

Testing REST APIs using Jest and Supertest ✅

위 내용은 Jest와 Supertest를 사용하여 REST API 테스트하기 ✅의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.