Node.js로 만든 API 테스트

슈퍼테스트

API서버를 만들 때, HTTP 검증 도구로 슈퍼테스트를 사용

HTTP 라이브러리는 각 프레임웍이 제공하는 기본 모듈을 사용해서 구현할 수 있다. 노드 js의 http, 브라우저의 XMHttpRequest 클래스가 그것이다.

이걸 직접 사용하기 보다는 한꺼풀 추상화한 라이브러리를 활용하는 편이다.

사용한다.

슈퍼 테스트는 바로 이 슈퍼 에이전트(superagent)를 기반으로한 HTTP 검증 라이브러리다.

HTTP assertions made easy via superagent.

시작하기: request()

슈퍼테스트의 인터페이스는 노드의 http.Server 객체나 함수를 인자로 받는 형태이다. 인자로 받은 서버 객체가 요청 대기 상태가 아니라면 슈퍼테스트는 임시로 포트를 열어 서버를 요청 대기 상태로 전환해준다.

module.exports = function(app) { 
	if (typeof app === 'function') { 
		app = http.createServer(app); }

예제코드에 보면 단순히 익스프레스 객체만 전달하는데 바로 이러한 동작이 있기 때문이다.

const request = require("supertest") // 1번
const express = require("express")
const app = express()
app.get("/user", (req, res) => res.json({ name: "alice" }))
request(app) // 2번 .get("/user") // 3번 .expect(200, { name: "alice" }) // 4번
  1. 슈퍼 테스트 모듈을 가져와서 request 변수에 담았다. 슈퍼에이전트 라이브러리의 영향을 받은 모양이다. 익스프레스에 GET /users 라우팅만 추가하고 HTTP 검증 로직을 작성했다.
  2. 서버 어플리케이션을 구동한다.
  3. get() 함수로 HTTP 요청을 만든다. 물론 메소드에 따라 post(), put(), delete() 함수를 사용할 수 있다. 헤더를 보내려면 set() 함수를 사용한다. 요청 본문을 보내려면 send() 함수를 사용한다.
  4. 마지막 expect() 함수로 응답을 검증하는데, 여기서는 상태 코드와 JSON 형식의 본문을 테스트했다. expect() 함수는 다양한 인터페이스가 있어서 상황에 맞게 활용할 수 있는데 expect(statusCode, body) 형태가 사용하기 편했다.