2020. 11. 3. 15:45ㆍNodeJS/TDD
지난 포스팅에서 슈퍼테스트(Supertest)를 이용해서 만든 테스트 코드가 잘 작동되는지 확인해보았다. 이번 포스팅에서는 본격적으로 테스트 코드에 맞게 API를 개선해 보는 코드를 만들려고 한다. 이번 포스팅에서 해볼 내용은 다음과 같다.
-
슈퍼테스트(Supertest)와 슈드(ShouldJs)를 같이 다뤄본다.
-
limit라는 쿼리 속성을 추가하여, 원하는 만큼의 데이터를 가져온다.
-
limit 속성 값이 Number형이 아닐 경우, Status 코드 400번을 보내는 실패 케이스를 만들어본다.
먼저, 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) => {
const limit = parseInt(req.query.limit || 10);
if (Number.isNaN(limit)) {
return res.status(400).end();
}
res.status(200).json(obj.slice(0, limit));
});
app.listen(3000, () => console.log("Listening On: localhost:3000"));
export default app;
위 코드는 /users 라우트에 접속하면, url에 limit 쿼리가 있는지 검사한다. 만약 limit 쿼리 값이 존재하지 않을 경우 10이라는 초기값을 준다. 그리고 limit값이 NaN인지 체크한다. 만약 NaN이라면 status 400번을 보내서 응답을 종료한다. 그런데 NaN이 아니라면, limit만큼의 데이터를 가져와 json형태로 출력한다. 그리고 server.spec.js라는 파일을 생성해서 다음과 같이 코드를 입력해보자.
import should from "should";
import request from "supertest";
import app from "./server";
describe("GET /users", () => {
describe("API 테스트", () => {
it("성공: 유저 객체는 배열이다.", (done) => {
request(app)
.get("/users") //요청을 보낸다.
.end((err, res) => {
res.body.should.be.instanceOf(Array); //res.body 값을 검증한다.
done();
});
});
it("성공: Limit 갯수만큼 응답", (done) => {
const limit = 2;
request(app)
.get(`/users?limit=${limit}`)
.end((err, res) => {
res.body.should.have.lengthOf(2);
done();
});
});
it("실패 (에러코드 400): limit이 숫자가 아닙니다.", (done) => {
request(app).get("/users?limit=two").expect(400).end(done);
});
});
});
위 코드는 두 개의 describe 메서드와 세 개의 it 메서드로 구성되어 있다. 각 메서드는 종속적인 관계를 이룬다. it 메서드는 성공, 실패 케이스로 나뉜다. 첫 번째 it 메서드는 출력되는 json값이 객체인지를 검사한다. 두 번째 it 메서드는 배열을 limit 길이만큼 json형태로 출력시키는 기능을 담당한다. 세 번째 it 메서드는 limit가 문자열일 경우, 400번 코드를 잘 응답하는지 검사하는 기능을 담당한다. 이제 터미널 창에 yarn test 또는 npm test를 입력해서 결과가 잘 나오는지 확인해보도록 하자.
'NodeJS > TDD' 카테고리의 다른 글
[Node.js] TDD를 이용하여 API 서버를 개발해보자. (0) | 2020.11.04 |
---|---|
[Node.js] 슈퍼 테스트(Super Test) (0) | 2020.11.03 |
[Node.js] Should.js 란 (0) | 2020.10.31 |
[Node.js] 모카(Mocha) (2) | 2020.10.27 |