테스트
단위 테스트
한 번에 클래스 하나만 살펴보고 해당 클래스의 모든 메서드가 예상대로 동작하는지 테스트
통합 테스트, E2E (엔드 투 엔드)테스트
애플리케이션 전체 테스트를 실행
단위 테스트 실습
테스트시 DB에 접근하거나 서비스에 의존적이지 않도록 트릭을 사용.
// auth.service.spec.ts
import {Test} from '@nestjs/testing'
import { AuthService } from './auth.service'
import { UsersService } from './users.service'
it('AuthService를 만들 수 있습니다.', async () => {
// Fake 서비스 생성
const fakeUsersService = {
find : () => Promise.resolve([]),
create: (email : string, password : string) => Promise.resolve({id : 1, email, password})
}
// Test DI Container 생성
const module = await Test.createTestingModule({
providers : [
AuthService,
{
provide : UsersService,
useValue : fakeUsersService
}
]
}).compile()
// 모듈에서 AuthService 인스턴스 생성
const service = module.get(AuthService)
expect(service).toBeDefined()
})
npm run test:watch

타입 스크립트 사용하기
import {Test} from '@nestjs/testing'
import { AuthService } from './auth.service'
import { UsersService } from './users.service'
import { User } from './user.entity'
it('AuthService를 만들 수 있습니다.', async () => {
// Fake 서비스 생성
const fakeUsersService : Partial<UsersService> = {
find : () => Promise.resolve([]),
create: (email : string, password : string) => Promise.resolve({id : 1, email, password} as User)
}
// Test DI Container 생성
const module = await Test.createTestingModule({
providers : [
AuthService,
{
provide : UsersService,
useValue : fakeUsersService
}
// DI시스템을 속이거나, 경로를 바꾸는 방법
// UsersService를 요청한 경우, fakeUsersService를 제공
]
}).compile()
// 모듈에서 AuthService 인스턴스 생성
const service = module.get(AuthService)
expect(service).toBeDefined()
})
TypeScript를 사용하여, 테스트의 매개변수와 반환값이 올바르게 나올 수 있도록 타입 시그니처를 갖추도록 할 수 있다.
Typescript - Partial
특정 타입의 부분 집합을 만족하는 타입을 정의
테스트 속도 향상 참고사항
// package.json
"test:watch": "jest --watch --maxWorkers=1",
Last updated