아래의 내용들은 지금 당장 필요 없는 개념들이므로, 필요할 때 공부한다.
namespace
jest
mocking// MainAppService.ts
import Category from '../domain/category/Category'
import ICategoryRepository from '../domain/category/ICategoryRepository'
class MainAppService {
async getCategories(repo: ICategoryRepository): Promise<Array<Category>> {
try {
return await repo.getAll()
} catch (e) {
throw e
}
}
}
export default MainAppService
// MainAppService.test.ts
import MainAppService from '../MainAppService'
import ICategoryRepository from '../../domain/category/ICategoryRepository'
import Category from '../../domain/category/Category'
const Mock = jest.fn(() => {
const impl: ICategoryRepository = {
getAll: jest.fn().mockReturnValue(Promise.resolve<Array<Category>>([
Category.create('test-id', {
name: 'test-name',
slug: 'test-slug',
thumbnailSrc: 'test-thumbnail-src'
})
])),
getByName: jest.fn(),
save: jest.fn(),
}
return impl
})
describe('MainAppService', () => {
it('getCategories', () => {
const appService = new MainAppService()
const mockRepository = new Mock()
appService.getCategories(mockRepository)
.then(categories => {
expect(mockRepository.getAll).toHaveBeenCalled()
const category = categories[0]
expect(category.id).toBe('test-id')
})
})
})
2. 푸비니의 원칙
> 어떤 사물들로 이루어진 집합을 두 가지 방법으로 계산할 경우, 두 방법 모두 옳다면 결과는 동일해야 한다.
3. 홀짝성의 원칙
> 인간은 구분 짓기를 좋아한다.