본문 바로가기

Backend/NestJS

[NestJS Overview] NestJS jest로 테스트하기(2) (e2e testing)

728x90
이번에 jest로 e2e testing을 해봤다.
이에 대한 기록이다.

e2e testing

저번 기록에서 unit testing과 e2e testing에 대한 간단한 설명을 하고, unit testing을 직접 해봤다.

 

[NestJS Overview] NestJS jest로 테스트하기(1) (unit testing)

jest를 이용해 NestJS의 API를 테스트해봤다. 이에 대한 공부 기록이다. jest jest는 JS를 테스팅하는 npm package이다. NestJS는 테스팅에 대한 세팅을 끝내고 우리에게 제공한다. jest를 통해 하는 테스팅은

choi-records.tistory.com

 

e2e testing은 test 하고자 하는 모듈 관련 모든 부분을 test 한다.

관련 모듈이 많아 unit testing을 할 때 번거로움이 있을 수 있는 모듈은 e2e testing이 더 편할 수 있다.

 

e2e testing을 해보기 전,

app.e2e-spec.ts 파일을 보자.

//app.e2e-spec.ts
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from './../src/app.module';

describe('AppController (e2e)', () => {
  let app: INestApplication;

  beforeEach(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [AppModule],
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
  });

  it('/ (GET)', () => {
    return request(app.getHttpServer())
      .get('/')
      .expect(200)
      .expect('Hello World!');
  });
});

unit testing을 할 때 사용했던 spec.ts 파일과 유사한 모습을 보인다.

 

it() 메서드를 보면 알 수 있지만 unit testing처럼 각각의 메서드에 대한 test를 하는 것이 아닌,

기본적으로 request를 보내는 test이고, request에 대해 결과값을 받아 test하고 있다.

 

환경설정

request를 보내기 때문에 

test를 할 때마다 app을 만든다.

여기서 app은 실제 브라우저 환경에서 만들어지는 app과는 다르다.

오직 test를 위한 app을 만드는 것을 위의 코드를 통해 알 수 있다.

 

위와 같은 이유로 main.ts에서 생성한 app에 대한 환경 설정을 test app에도 똑같이 적용해줘야 한다.

beforeAll()

위에서 언급한 대로 test 할 때마다 새로운 app을 만들기 때문에 가짜 DB로 만든 todos app은 매번 초기화될 것이다.

이를 방지하기 위해 위의 코드의 beforeEach() 메서드를 beforeAll()로 바꿔주자.

 

Test

test 하는 부분을 보자.

  it('/ (GET)', () => {
    return request(app.getHttpServer())
      .get('/')
      .expect(200)
      .expect('Hello World!');
  });
  • request(app.getHttpServer()) : testing app에서 HttpServer를 리턴해서 app에 대한 요청을 보낼 수 있게 함
  • get('/') : 메서드와 url 지정
  • expect(200) : 지정한 메서드와 url에 대한 기대 status code
  • expect('Hello World!') : 위의 메서드에서의 반환 값
create를 이용해 todos를 생성하고,
id를 조회하는 test코드를 짜 보자.

POST

id를 통해 todo를 조회하려면 먼저 todo를 추가해줘야 한다.

  it('/todos (POST)', () => {
    return request(app.getHttpServer())
      .post('/todos')
      .send({ action: 'test' })
      .expect(201);
  });

위와 다른 점이라면 send 메서드를 사용한 것이다.

todo를 생성하려면 data를 보내줘야 하기 때문에 send 메서드를 통해 data를 전달하고,

expect 메서드로 status code를 확인한다.

POST 요청이 정상적으로 test 된 것을 볼 수 있다.

 

GET

위에서 추가한 todo를 id를 통해 조회하는 것을 test 해보자.

  it('/todos/1 (GET)', () => {
    return request(app.getHttpServer()).get('/todos/1').expect(200);
  });

위와 다른 점은 없고, get 메서드에 id를 포함한 URI를 전달했다.

정상적으로 test 된 것을 볼 수 있다.

 


마치며

Nomad Coder의 NestJS 강의를 들으며 배웠던 것들을 모두 정리했다.

사실 간단하게 API를 만들어보는 정도라 Nest에 대한 맛보기라고 생각하고 공부했다.

 

NestJS로 API 만들기 – 노마드 코더 Nomad Coders

Enterprise Server Side Applications

nomadcoders.co

충분히 NestJS에 흥미를 붙였다고 생각하고, 이제 공식문서와 책을 보면서 제대로 공부해봐야겠다.

 

잘못된 정보에 대한 피드백은 환영입니다.

감사합니다.

 

 

728x90