Supertest 사용법 (2) - 사용 예제

modolee·2020년 10월 7일
4
post-thumbnail

서버 코드 예제

  • GET 메서드 API
    • 상태코드 200 리턴
    • JSON 형태로 사용자 이름 전달
  • POST 메서드 API
    • 요청 시 body에 name을 전달 받음
    • 상태코드 201 리턴
    • JSON 형태로 body에 전달 받았던 이름 전달
// app.js
import express from 'express';

const app = express();
app.use(express.urlencoded({ extended: true }));
app.use(express.json());

app.get('/user', (req, res) => {
  res.status(200).json({ name: 'modolee' });
});

app.post('/user', (req, res) => {
  const { name } = req.body;

  res.status(201).json({ name })
});

export default app;

테스트 코드 예제

  • Jest 기반으로 테스트. reuqest 생성, expect 모두 supertest를 사용
import request from 'supertest'
import app from './app';

describe('End-to-End Test', () => {
  describe('GET /user', () => {
    test('responds with json', async () => {
      await request(app)
        .get('/user')
        .set('Accept', 'application/json')
        .expect(200)
        .expect('Content-Type', /json/)
        .expect({ name: 'modolee' });
    });
  });

  describe('POST /user', () => {
    test('responds with name in json', async () => {
      await request(app)
        .post('/user')
        .set('Accept', 'application/json')
        .type('application/json')
        .send({ name: 'modolee' })
        .expect(201)
        .expect('Content-Type', /json/)
        .expect({ name: 'modolee' });
    });
  });
});
  • Jest 기반으로 테스트. request 생성은 supertest를 사용하고, expect는 jest를 사용
import request from 'supertest'
import app from './app';

describe('End-to-End Test', () => {
  describe('GET /user', () => {
    test('responds with json', async () => {
      const res = await request(app)
        .get('/user')
        .set('Accept', 'application/json');

      expect(res.status).toBe(200);
      expect(res.headers['content-type']).toMatch('/json');
      expect(res.body).toEqual({ name: 'modolee' });
    });
  });

  describe('POST /user', () => {
    test('responds with name in json', async () => {
      const res = await request(app)
        .post('/user')
        .set('Accept', 'application/json')
        .type('application/json')
        .send({ name: 'modolee' })

      expect(res.status).toBe(201);
      expect(res.headers['content-type']).toMatch('/json');
      expect(res.body).toEqual({ name: 'modolee' });
    });
  });
});
profile
기초가 탄탄한 백엔드 개발자를 꿈꿉니다.

1개의 댓글

comment-user-thumbnail
2023년 3월 31일

앗... 사랑합니다...

답글 달기