오늘도 개발

jest로 unit test하기 본문

웹 프로그래밍/Javascript

jest로 unit test하기

Sueeeeeee 2022. 10. 2. 22:13

1. 테스트용 db 생성

db에서 새 db 생성한 후 .env.test파일 생성

<.env.test>

TYPEORM_CONNECTION = mysql
TYPEORM_HOST = 127.0.0.1
TYPEORM_USERNAME = root
TYPEORM_PASSWORD = password
TYPEORM_DATABASE = justagram2test
TYPEORM_PORT = 3306
TYPEORM_LOGGING = True

 

2. 라이브러리 설치

jest 설치

npm install jest

supertest 설치

npm install --save-dev supertest

 

3. jset로 테스트 실행시 .env 대신 .env.test를 쓰도록 설정

<package.json>

scripts에 추가

  "scripts": {
    "test": "DOTENV_CONFIG_PATH=.env.test jest --setupFiles=dotenv/config"
  },

 

4. 유닛테스트 작성

<test/user.test.js>

const request = require("supertest");

const { createApp } = require("../app");
const { AppDataSource } = require("../src/models/data-source");

describe("Sign Up", () => {
    let app;

    // 테스트 전 공통적으로 할 일
    beforeAll(async() => {
        // 앱, 데이터베이스만 가져옴. 서버는 켤 필요 없음.
        app = createApp();
        await AppDataSource.initialize();
        await AppDataSource.query(`
            INSERT INTO users(email, password) VALUES("garfield@naver.com", "12312")
        `)
    })

    // 테스트 후 공통적으로 할 일
    afterAll(async() => {
        // 테스트 데이터 삭제
        await AppDataSource.query(`TRUNCATE users`);
        // db 커넥션 끊기
        await AppDataSource.destroy();
    });

    // 성공 경우 테스트
    test("SUCCESS: created user", async() => {
        await request(app)
        .post("/users/signup")
        .send({email: "snoopy@naver.com", password: "1212"})
        .expect(201);
    })

    // 중복 이메일인 경우 테스트
    test("FAILED: duplicated email", async() => {
        await request(app)
        .post("/users/signup")
        .send({ email: "garfield@naver.com", password: "12312" })
        .expect(400);
    })
})

 

5. 테스트 실행

npm test

'웹 프로그래밍 > Javascript' 카테고리의 다른 글

비교 연산자 ==와 ===  (0) 2023.12.05
자바스크립트의 this  (0) 2022.10.17
Layered Pattern  (0) 2022.10.01
Node.js에서 인증, 인가 진행하기(bcrypt, jwt)  (0) 2022.09.29
Middleware  (0) 2022.09.28