Jest 및 Supertest로 Express.js 백엔드를 테스트하는 방법

Express를 사용하여 Node.js 백엔드를 구축했으며 이제 테스트를 위해 깨끗하고 안정적인 접근 방식이 필요하십니까?

이 기사에서는 supertest 모듈을 사용하여 Express.js 백엔드를 쉽게 테스트할 수 있는 방법을 보여드리겠습니다!

우선 단일 GET 엔드포인트가 있는 샘플 앱이 있습니다.

// server.js
import express from 'express';

const app = express();

app.get('/config', function(req, res) {
  res.json({ version: '0.0.1' });
});

export const server = app;


테스트에서 GET /config 상태 코드 200 를 반환하고, 콘텐츠 유형이 json 이며, 이 JSON이 정확히 무엇인지 확인하려고 합니다.

테스트를 작성하기 전에 npm install --save supertest를 입력하여 supertest 모듈을 node_modules 에 설치하고 저장할 수 있습니다. 또한 jest 로 테스트 환경을 이미 구성했을 것으로 예상합니다.
--save-dev 대신 --save 또는 yarn 대신 npm 옵션이 마음에 들면 이 옵션도 사용할 수 있습니다. 여기서는 특별히 중요하지 않습니다.

일단 그것이 제자리에 있으면 테스트 작성을 진행할 수 있습니다.

따라서 supertest 로 Node.js 백엔드를 테스트할 수 있으려면 테스트 파일로 가져온 다음 서버에 대한 테스트 요청을 수행하는 데 사용할 함수를 만들어야 합니다.

const requestWithSupertest = supertest(server);


그러면 테스트 중인 시스템에서 응답을 받을 수 있습니다.

const res = await requestWithSupertest.get('/config');


계속 진행하기 전에 요청 약속을 이행해야 하므로 await 를 추가해야 합니다.

이제 요청이 완료되고 응답이 res 변수에 저장되면 어설션을 추가해 보겠습니다.

  expect(res.status).toEqual(200);
  expect(res.type).toEqual(expect.stringContaining('json'));
  expect(res.body).toEqual({ version: '0.0.1' });


계획대로 3가지 핵심 사항을 테스트합니다. 응답 상태 코드, 응답 유형 및 응답 본문입니다.

다 더하면 이렇게 됩니다.

// test.js
import '@babel/polyfill';            // support for async/await
import supertest from 'supertest';
import { server } from '../server.js';

const requestWithSupertest = supertest(server);

test('GET /config should be implemented according to the spec', async () => {
  const res = await requestWithSupertest.get('/config');
  expect(res.status).toEqual(200);
  expect(res.type).toEqual(expect.stringContaining('json'));
  expect(res.body).toEqual({ version: '0.0.1' });
})


좋은 아이디어는 이러한 테스트 케이스를 별도의 테스트로 분할하고 단일describe 블록 아래에 결합하는 것입니다. 그러나 데모 목적으로 그럴 필요가 없습니다.

supertest로 Node.js/Express.js 백엔드를 테스트하는 것은 매우 편리합니다. 바퀴를 재발명할 필요가 없습니다. express.js 서버의 인스턴스 주위에 래퍼를 만들고 요청을 보내십시오.

Learn Full Stack JavaScript

좋은 웹페이지 즐겨찾기