"TDD (테스트 주도 개발)은 필수다." 라는 말은 많이 들었지만,
실무에서 테스트 코드를 처음 작성해보며 공부한 내용을 소개한다.
아직은 개발 후 테스트 코드를 작성하고 있지만 테스트 코드를 먼저 짜고 개발을 하는 날이 오길 바라며...
Jest
를 제공한다..spec
or .test
접미사를 추가한다.// cats.controller.spec.ts
describe('CatsController', () => {
let catsController: CatsController;
let catsService: CatsService;
beforeEach(() => {
catsService = new CatsService();
catsController = new CatsController(catsService);
});
describe('findAll', () => {
it('should return an array of cats', async () => {
const result = ['test'];
jest.spyOn(catsService, 'findAll').mockImplementation(() => result);
expect(await catsController.findAll()).toBe(result);
});
});
});
- beforeEach / afterEach
: 각 테스트가 실행되기 전/후로 반복적으로 실행됨
- beforeAll / afterAll
: 모든 테스트가 실행되기 전/후로 한 번만 실행됨
// cats.controller.spec.ts
describe('CatsController', () => {
let catsController: CatsController;
let catsService: CatsService;
beforeEach(async () => {
const moduleRef = await Test.createTestingModule({
controllers: [CatsController],
providers: [CatsService],
}).compile();
catsService = moduleRef.get<CatsService>(CatsService);
catsController = moduleRef.get<CatsController>(CatsController);
});
describe('findAll', () => {
it('should return an array of cats', async () => {
const result = ['test'];
jest.spyOn(catsService, 'findAll').mockImplementation(() => result);
expect(await catsController.findAll()).toBe(result);
});
});
});
@Module
에 전달하는 동일한 객체