른록노트

[Javascript] supertest 사용법 본문

Programming/[Javascript]

[Javascript] supertest 사용법

른록 2021. 12. 7. 04:11

supertest

superagent를 통해 HTTP assertion이 더 쉬워졌습니다.

about

supertest의 동기는 HTTP 테스트를 위한 high-level 추상화를 제공하는 동시에 superagent에서 제공하는 lower-level API을 사용할 수 있도록 합니다.

설치방법

npm install supertest --save-dev

사용법

일단 설치되면 이제 단순히 require('supertest');를 호출하여 참조할 수 있습니다.

http.Server 또는 함수를 request()에 전달할 수 있습니다. 서버가 아직 connections을 listening 하지 않는 경우 임시 포트에 바인딩되므로 포트를 추적할 필요가 없습니다.

SuperTest는 모든 테스트 프레임워크에서 작동합니다. 다음은 테스트 프레임워크를 전혀 사용하지 않은 예입니다.

const request = require('supertest');
const express = require('express');

const app = express();

app.get('/user', function(req, res) {
  res.status(200).json({ name: 'john' });
});

request(app)
  .get('/user')
  .expect('Content-Type', /json/)
  .expect('Content-Length', '15')
  .expect(200)
  .end(function(err, res) {
    if (err) throw err;
  });

mongoose와 jest를 사용하는 프로젝트 예 입닌다.

const request = require('supertest');
const app = require('../api/index'); // 사용하는 express


beforeAll(async () => {
  await mongoose
    .connect(config.mongoTestUrl, {})
    .then(() => console.log('Test MongoDB Connected...'))
    .catch((err) => console.log(err));
});

afterAll(async () => {
  await mongoose.connection.close();
});

describe('[Api 테스트]', () => {
  test('POST /api/test 테스트', function (done) {
    request(app)
      .post('/api/test')
      .send({
        data: 'testUser',
      })
      .set('Accept', 'application/json')
      .expect('Content-Type', /json/)
      .expect(200)
      .end(function (err, res) {
        if (err) return done(err);
        expect(res.body.success).not.toBeNull();
        return done();
      });
  });
});

API

.write(), .pipe() 등을 포함한 모든 superagent 메서드를 사용할 수 있으며 하위 수준 요구 사항에 대해 .end() 콜백에서 어설션을 수행할 수 있습니다.

.expect(status[, fn])

Assert response status code.

.expect(status, body[, fn])

Assert response status code and body.

.expect(body[, fn])

Assert response body text with a string, regular expression, or parsed body object.

.expect(field, value[, fn])

Assert header field value with a string or regular expression.

.expect(function(res) {})

Pass a custom assertion function. It'll be given the response object to check. If the check fails, throw an error.

request(app)
  .get('/')
  .expect(hasPreviousAndNextKeys)
  .end(done);

function hasPreviousAndNextKeys(res) {
  if (!('next' in res.body)) throw new Error("missing next key");
  if (!('prev' in res.body)) throw new Error("missing prev key");
}

.end(fn)

Perform the request and invoke fn(err, res).

참고사이트

supertest git

반응형
Comments