📕TDD란?
인용문입니다.
📕유닛 테스트란?
1.텍스트 package.json < "test" : "jest"옵션
● watch vs watchAll
: git에 커밋된 파일제외, 수정중인것만 테스트할 것인가 vs 모든파일 테스트를 할것인가
2.테스트파일 소스 작성
●제목1 test('add', () => { expect(add(1, 2)).toBe(3) }); ●비동기상황 테스트코드 검증 describe('Async', () => { it('asyc', (done) => { fetchProduct().then((item) => { expect(item).toEqual({item: 'milk', price: 200}); done(); }); }); it('asyc - return', () => { return fetchProduct().then((item) => { expect(item).toEqual({item: 'Milk', price: 200}); }); }); it('asyc - await', async () => { const product = await fetchProduct(); expect(product).toEqual({item: 'Milk', price: 200}); }); it('asyc - resolves', () => { return expect(fetchProduct()).resolves.toEqual({ item: 'Milk', price: 200 }); }); it('asyc - reject', () => { return expect(fetchProduct('error')).rejects.toBe('netWork error'); }); ●Mock을 이용한 테스트 검증 1. describe('check', () => { let onSuccess; let onFail; beforeEach(() => { onSuccess = jest.fn(); onFail = jest.fn(); }); it('should call ss when pre is true', () => { check(() => true, onSuccess, onFail); expect(onSuccess).toHaveBeenCalledTimes(1); expect(onSuccess).toHaveBeenCalledWith('yes'); expect(onFail).toHaveBeenCalledTimes(0); }); 2. test.js> jest.mock('../product_client'); const fetchItems = jest.fn(async () => [ {item: 'milk', available: true}, {item: 'banana', available: true} ]); ProductClient.mokckImplementation(() => { return{ fetchItems }; }); : product_service가 의존하는 product_client를 mock으로 만들어준다. let productService; beforeEach(() => { productService = new ProductService(); }); const items = await productService.fetchAvailableItems(); :최상단에 기존에 require로 불러들인 ProductService(x) 새로 imple시킨 productService
3.jest.config.js
●clearMocks
:beforeEach 단계에서 mock Obj들을 mockClear()시켜줘야 한다.