테스트시 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()
})
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를 사용하여, 테스트의 매개변수와 반환값이 올바르게 나올 수 있도록 타입 시그니처를 갖추도록 할 수 있다.
// package.json
"test:watch": "jest --watch --maxWorkers=1",