NestJS에서 test하는법

LeeJaeHoon·2021년 12월 4일
0
post-thumbnail
  1. test파일 만들기

    • movies.controller.ts파일을 test하고 싶으면 movies.service.spec.ts파일을 만들어야 한다.
      • jest가 .spec.ts파일들을 찾아 볼 수 있도록 설정 되어 있다
  2. test:cov

    • 코드가 얼마나 테스팅 됐는지 또는 안 됐는지 알려준다.
    • npm run test:cov
      • 모든 spec.ts파일을 찾아서 몇 줄이 테스팅 되었는지 알려준다
  3. test:watch

    • 모든 테스트 파일들을 찾아내서 거기서 무슨 일이 일어나는지 관찰한다.
  4. 유닛 테스팅

    • 모든 function을 따로 테스트 하는 것
    • 서버에서 분리된 유닛을 테스트 하는 것
  5. end-to-end 테스트

    • 모든 시스템을 테스팅 하는 것
    • 사용자가 취할만한 액션들을 테스트 하는 것
  6. 유닛 테스트 하는법

    • .spec.ts파일에 가서 describe을 활용해서 test한다.
    • "getAll"과 "should return an array"는 테스트시 나올 메세지이다.
    • it의 2번째 argument로 함수가 들어가는데 이함수에 적은 코드대로 테스트가 이루어진다.
      • expect(result).toBeInstanceOf(Array)
      • result의 리턴값이 Array인지 테스트하는 코드이다.
    describe('getAll', () => {
        it('should return an array', () => {
          const result = service.getAll();
          expect(result).toBeInstanceOf(Array);
        });
    });
    • deleteOne함수 테스트
    	describe('deleteOne', () => {
        it('delete a movie', () => {
          service.create({
            title: 'Test Movie',
            genres: ['test'],
            year: 2000,
          });
          const allMovies = service.getAll().length;
          service.deleteOne(1);
          const afterDelete = service.getAll().length;
          expect(afterDelete).toBeLessThan(allMovies);
        });
        it('should return a 404', () => {
          try {
            service.deleteOne(999);
          } catch (error) {
            expect(error).toBeInstanceOf(NotFoundException);
            expect(error.message).toEqual(`Movie with ID: 999`);
          }
        });
      });
  7. e2e테스트 하는법

     describe('/movies', () => {
        it('(GET)', () => {
          return request(app.getHttpServer()).get('/movies').expect(200).expect([]);
        });
        it('(POST)', () => {
          return request(app.getHttpServer())
            .post('/movies')
            .send({ title: 'TEST', year: '2021', genres: ['TEST'] })
            .expect(201);
        });
        it('(DELETS)', () => {
          return request(app.getHttpServer()).delete('/movies').expect(404);
        });
      });

0개의 댓글