Nest 프로젝트의 package.json - scripts의 테스트 명령어를 보면 Jest 테스트 라이브러리를 사용한다
describe, it, test, expect
describe() 테스트 모듈을 그룹화하거나 계층별로 나눌 수 있고, it(), test(), expect()**** 키워드를 통해 테스트 코드를 작성한다
it() 는 test() 키워드의 alias이며, 대체하여도 동일하게 작동한다
beforeAll, afterAll, beforeEach, afterEach
beforeAll(), afterAll() 는 테스트 파일의 시작과 끝에 한번 실행된다. 전역 변수를 관리할 수 있다
beforeEach(), afterEach() 는 테스트 파일 내 테스트 케이스의 시작과 끝에 실행된다
실행 순서
beforeAll →
[beforeEach → (describe - *it) → afterEach] →
・・・
→ [beforeEach → (describe - *it) → afterEach]
→ afterAll
beforeAll(async () => {
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [AppModule],
}).compile();
app = moduleFixture.createNestApplication();
await app.init();
});
단위 (Unit) 테스트
api.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class ApiService {
/*
get
*/
getOne(id: number) {
return id
}
getEmptyArr() {
return []
}
getPlusOne(num: number) {
return num + 1;
}
/*
update
*/
update(b: boolean) {
return !b;
}
}
api.service.spec.ts
import { Test, TestingModule } from '@nestjs/testing';
import { ApiService } from './api.service';
import { describe } from 'node:test';
describe('ApiService', () => {
let service: ApiService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [ApiService],
}).compile();
service = module.get<ApiService>(ApiService);
});
it('should be defined', () => {
expect(service).toBeDefined();
});
describe('get', () => {
it('should return id', () => {
const id = 1;
const ret = service.getOne(id);
expect(ret).toEqual(id);
})
it('should return empty array', () => {
const ret = service.getEmptyArr();
expect(ret).toEqual([]);
})
})
describe('update', () => {
it('should return falsy', () => {
const b = true;
const ret = service.update(b);
expect(ret).toBeFalsy();
})
})
});
테스트
$ npm run test
$ npm run test:cov
통합 (e2e, End to End) 테스트
npm run test:e2e
명령어를 통해 통합 테스트를 진행할 수 있다.
main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(
new ValidationPipe(
{
whitelist: true,
forbidNonWhitelisted: true,
transform: true
}
)
)
await app.listen(3000);
}
bootstrap();
test/app.e2e-spec.ts
beforeAll(async () => {
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [AppModule],
}).compile();
app = moduleFixture.createNestApplication();
app.useGlobalPipes(
new ValidationPipe(
{
whitelist: true,
forbidNonWhitelisted: true,
transform: true
}
)
)
await app.init();
});
main.ts에 app에 대한 설정 (ex.GlobalPipes)을 했다면, app.e2e-spec.ts 파일에도 동일하게 설정해 주어야 한다
참고 링크
https://docs.nestjs.com/fundamentals/testing
'JavaScript > NestJS' 카테고리의 다른 글
[NestJS] 환경 변수 (config) 사용하기 (0) | 2023.08.20 |
---|---|
[NestJS] Logging 하기 (0) | 2023.08.19 |
[NestJS] 경로 alias 설정하기 (0) | 2023.08.17 |
[NestJS] API 생성하기 (+ CORS) (0) | 2023.08.17 |
[NestJS] 시작하기 (0) | 2023.08.17 |