React에서 Test Code 작성하기
Test Code: 소프트웨어의 각 기능이 의도대로 작동하는지 확인하기 위해 사용되는 코드
장점
JavaScript 테스트 프레임워크
Jest 공식문서
설치
npm i -D jest
package.json 설정
npm test
명령어를 통해 test 파일 실행 가능npm test 파일명(OR 경로)
sum.js
파일 생성파일(함수)이름.test.js
생성sum.test.js
파일 생성npm test
입력expect(1+2).toBe(3)
toBe()
not
을 추가해서 사용expect(a + b).not.toBe(0)
toEqual()
사용toEqual()
toContain()
toMatch()
toBeTruthy()
및 toBeFalsy()
toBeTruthy()
의 경우 값이 true 일때 test 통과toBeFalsy()
의 경우 값이 false 일때 test 통과Jest matchers : 더 많은 matcher 확인 가능
React에서는 따로 Jest를 설치할 필요가 없다.
npx create-react-app my-app
명령어로 react 프로젝트 생성 시 package.json
에 React Testing Library
가 설치된 것 확인 가능npm install --save-dev @testing-library/jest-dom
React Testing Library: Jest와 함께 사용하여 React 컴포넌트를 테스트하는 데 도움을 주는 라이브러리
React Testing Library 공식문서
testing-library/jest-dom github : Custom matchers 예시 코드 확인 가능
React로 간단한 TodoList 웹을 만들고 Test code 작성하기
Import
toBeInTheDocument()
와 같은 custom matcher를 사용하기 위해 아래 코드 추가import "@testing-library/jest-dom/extend-expect";
{render, screen, fireEvent}
: React 컴포넌트의 상태와 동작을 테스트할 수 있는 함수와 객체로 render
함수로 컴포넌트를 렌더링하고,screen
객체로 DOM 요소를 선택하며, fireEvent
함수로 이벤트를 발생시켜 테스트 케이스를 작성render
함수: React 컴포넌트를 가상 DOM(Virtual DOM)에 렌더링하고 렌더링된 컴포넌트에 대한 테스트 환경을 설정screen
객체: 렌더링된 컴포넌트에서 DOM 요소를 찾고 상호작용하는 데 사용screen.getByText(), screen.getByRole(), screen.queryByText()
등과 같은 메서드를 사용하여 DOM 요소를 선택하고 검사fireEvent
함수: DOM 요소에서 이벤트를 발생시키는 데 사용fireEvent.click(buttonElement)
는 특정 버튼을 클릭하는 것처럼 동작fireEvent.change(inputElement, { target: { value: 'New Value' } })
는 사용자가 입력 필드에 새로운 값을 입력하는 것처럼 동작Test code
describe
함수로 테스트 케이스를 그룹화it
함수로 각각의 테스트 케이스를 정의Test code 상세
"add 버튼 클릭 시 todo 추가"
케이스로 "add 버튼 클릭 시 todo 추가" 동작이 정확하게 동작하는지를 테스트TodoList
컴포넌트를 화면에 렌더링입력 필드
와 "Add"라는 버튼 요소
를 찾음(test에서 사용 될 요소)npm test
로 test 파일 실행
장점
단점
결론