[Node.js] 슈퍼 테스트(Super Test)

2020. 11. 3. 13:32NodeJS/TDD

슈퍼 테스트(Super Test)

 

 모카(Mochajs), 슈드(shouldJs)를 다룬 포스팅에서는 메서드 레벨의 단위 테스트를 다루었다. 단위 테스트란, 가장 작은 단위를 테스트한다는 것으로 즉각적인 피드백이 나온다는 장점이 있다. 하지만, 하나의 메서드가 잘 동작하는 것은 보장할 수 있지만, 그들이 결합되었을 때도 잘 작동한다는 보장 할 수 없다.

 

 

 이번에 포스팅할 슈퍼테스트통합 테스트에 사용된다. 통합 테스트란, API의 기능을 테스트 하는 것으로 API 기능 뿐만 아니라 여러 개(외부 라이브러리도 포함)를 통합해서 테스트하는 것을 말한다. 슈퍼테스트는 ExpressJS 통합 테스트용 라이브러리내부적으로 익스프레스 서버를 구동시켜 실제 요청을 보낸 뒤 결과를 검증한다. 따라서 이번 포스팅에서는 EspressJS슈퍼테스트를 이용해서 API 기능 테스트를 어떻게 하는지 알아보려고 한다. 먼저, 슈퍼테스트(Supertest)를 설치하도록 하자.

npm install supertest --save-dev
yarn add supertest --dev

 

그리고 server.js라는 파일을 만들어 다음 코드를 입력한다.

import express from "express";

const obj = [
  { id: "cheonyulin", name: "천유린" },
  { id: "cheonyulin1", name: "천유린1" },
  { id: "cheonyulin2", name: "천유린2" },
];

const app = express();

app.get("/", (req, res) => {
  res.send("Hello World!");
});

app.get("/users", (req, res) => {
  res.status(200).json(obj);
});

app.listen(3000, () => console.log("Listening On: localhost:3000"));

export default app;

 

 위 코드는 바벨 컴파일러를 설치해서 ES6를 이용해서 짠 코드다. 이 코드의 목적은 users에 접속하면 객체 obj가 제대로 출력이 되는지 확인하는 것이다. 그래서 변수 app을 export default를 이용해서 모듈화 해주었다. 그 다음에는 server.spec.js라는 파일을 만들어 다음 코드를 입력하도록 하자.

import app from "./server";
import request from "supertest";

describe("GET /users는", () => {
  it("...", (done) => {
    request(app)
      .get("/users")
      .end((err, res) => {
        console.log(res.body);
        done();
      });
  });
});

 위 코드를 설명하면 다음과 같다. 먼저 같은 폴더 내에 있는 server파일 모듈을 불러온다. 그 다음에는 설치한 supertest 모듈을 불러온다.

it 메서드의 콜백함수의 파라미터, done을 써준 이유는 비동기적 호출을 완료했다는 것을 알려주기 위해서다. 객체 obj에 대한 내용을 콘솔로 출력한 후, 내가 할일은 다 끝났습니다라는 것을 알려주기 위함이라고 생각하면 될 것 같다.

 

 마지막으로 package.json파일에 scripts 객체의 test 속성 값을 밑과 같이 설정해준 후, npm test 또는 yarn test를 입력해서 출력되는 결과를 확인한다.

"test": "mocha server.spec.js -r @babel/register"

 

[그림 1] 출력 결과