내 프로젝트에 Jest 테스트 모듈 추가하기

김예지·2021년 8월 20일
0
post-custom-banner

프로젝트를 진행하며 mock test 코드를 mocha로 작성했었다.
하지만 이번에 실제 테스트 코드를 기획하며, Jest로 변경하게 되었는데 이유는 다음과 같다.

  • mocha에 대한 mock db test의 자료가 Jest보다 훨씬 적다.
  • Jest는 통합 테스트 라이브러리로, 단일 라이브러리에서 mock 기능을 지원하는데, mocha에서는 추가로 설치해야할 라이브러리가 많다.
    이번에 테스트를 진행하면서, 실제 sequelize 설정에만 있던 test 옵션을 만지게 되었는데, dotenv 설정을 app.js에서 해주게되면 app.js보다 sequelize의 index.js 설정이 먼저 되기 때문에 잘 안된다는것도 알 수 있었다.
    어쨌든 test용 db 설정을 따로 해주게 되었다.

    test 모드로 가동하게 되면, (우리 기존 db명은 kangaroo) kangaroo_test 데이터베이스에서 따로 테스트용 코드를 구동한다.
    Jenkins 서버에서 구동하는 test script도 다음과 같이 바꿔주었다.

    테스트코드는 다음과 같이 구성하게 되었다. (test/user.test.js)
const { makeUser } = require("../controllers/user-controller");

describe("makeUser", () => {
  const req = {
    body: { email: "test@naver.com", password: "1234", nickname: "Pray123" },
  };
  const res = {
    status: jest.fn(() => res),
    send: jest.fn(),
  };

  test("회원가입 완료 후  200 응답", async () => {
    await makeUser(req, res);
    expect(res.send).toBeCalledWith(200);
  });
  test("닉네임 중복시 403 응답", async () => {
    req.body.email = "test@gmail.com";
    await makeUser(req, res);
    expect(res.send).toBeCalledWith(403);
  });
  test("이메일 중복시 403 응답", async () => {
    req.body.email = "test@naver.com";
    req.body.nickname = "Pray2";
    await makeUser(req, res);
    expect(res.send).toBeCalledWith(403);
  });
  test("테스트용 회원2 생성", async () => {
    req.body.email = "test@gmail.com";
    await makeUser(req, res);
    expect(res.send).toBeCalledWith(200);
  });
});
//뒷부분 생략

일단 user controller에 대한 대략적인 테스트코드를 작성한 상태이고, 기본 모듈 작동만 테스트한뒤 supertest를 이용한 통합 테스트를 더 구현할 예정이다.

profile
새싹
post-custom-banner

0개의 댓글