리액트 테스팅 라이브러리는 TDD(Test-Driven Development)에서 사용되는 라이브러리로,
Test-Driven Development(테스트 주도 개발)은 코드를 작성하기 이전에 테스트를 작성하고 그 테스트에 통과하도록 코드를 작성하는 방식을 말한다.
리액트 라이브러리에는 Jest와 Vitest라는 테스팅 라이브러리가 있다.
이 두 가지 라이브러리의 문법은 차이가 없고, 설정과 구성 구문만이 다르다.
테스트 코드 작성법은 두 라이브러리 모두 동일한 문법을 사용한다. test 메서드는 두 개의 인자를 받아온다.
테스트를 설명하는 문자열 인수 하나와, 테스트가 통과할 지 실패할 지를 결정할 때 실행할 함수를 받아온다.
테스트가 실패하면 에러를 반환한다.
test('테스트', () => {
render(<App />)
const headingElement = screen.getByText(/learn react/i);
expect(headingElement).toBeInTheDocument();
})
render
메서드에서는 시뮬레이션 된 DOM을 만든다. 이렇게 가져온 DOM은 screen
메서드를 통해 접근할 수 있다.
마지막 줄의 expect에서 테스트를 단언(assertion)한다. 이 부분에서 테스트의 성공 혹은 실패 여부가 결정된다.
expect(linkElement).toBeInTheDocument();
expect(element.textContent).toBe('hello');
expect(elementsArray).toHaveLength(7)
단언은 위의 구조로 작성된다. expect
로 시작되고 expect
는 단언의 대상을 인자로 받는다. 다음으로 단언의 유형을 결정하는 matcher함수
를 가져온다. 이 함수는 인자를 받을 수도 있고, 받지 않을 수도 있다.
유닛 테스트는, 코드의 한 단위를 테스트하는 것을 말한다. 특정 유닛이 다른 유닛과 상호작용하는 것을 테스트하지 않는다.
통합 테스트는 유닛 간의, 컴포넌트와 컴포넌트 등의, 상호 작용을 테스트 한다.
기능 테스트는 소프트웨어의 특정 기능을 테스트한다. 폼을 작성할 때, 잘못된 데이터를 입력할 때 경고 문구가 뜨는지 등의 테스트가 이에 속할 수 있다. 코드가 아닌 동작을 테스트 한다.