[jest] jest란?
글 작성자: 망고좋아
반응형
🎯 jest
- facebook에서 오픈소스화한 테스팅 프레임워크
- assertion 함수들, test runner, mock 라이브러리 등을 모두 제공한다.
- create-react-app에서 기본적으로 사용된다. (npm test)
- 사용성이 좋고, 가장 인기 있는 프로젝트다.
📝 jest의 핵심 기능들
- assertion matchers (
.toBe
,.toEqual
) - async assertion
- mock functions
- testing lifecycle functions
- grouping
- snapshot testing
📝 Assertion matchers
- jest는 풍부한 matcher를 제공하여, 여러 상황에서 match를 체크할 수 있다.
- expect()는 expectation object를 리턴한다. 이 object의 메서드를 이용해 여러 매칭 상황을 assert함.
- expect().toMatch()
- .toBe()
- .toBeDefined()
- .toHaveCalledWith()
📝 Async Assertion
- 비동기 상황의 테스트를 처리할 수 있는 여러 방법을 제공한다.
- callback, promise, async/await을 모두 활용할 수 있다.
📝 Mock functions
- mock function을 만든다.
- 모듈 전체를 mocking 할 수 있다.
- 라이브러리 전체를 mocking 할 수 있다.
📝 Lifecycle functions
- 각 테스트의 시작과 끝, 전체 테스트의 시작과 끝에 원하는 작업을 할 수 있다.
- beforeEach, afterEach, beforeAll, afterAll 함수를 활용한다.
- 무거운 데이터를 로드하고 테스팅을 해야 할 경우 beforeEach, beforeAll을 사용할 수 있다.
- 전체 테스트를 한 후 메모리를 해제시켜야 하다면 afterEach를 사용할 수 있다.
- describe 블록 안에 사용하면 별도의 scope를 가진다.
📝 Grouping
- describe 함수를 이용해 여러 test() 함수를 논리적으로 나눌 수 있다.
- describe 함수 안에 describe 함수가 중첩될 수 있다.
📝 Snapshot Testing
- 특정 함수, 모듈, 컴포넌트 등의 결과를 serializable 한 형태의 snapshot으로 저장하고, 추후 변경이 발생했을 때 이전의 snapshot과 새로운 snapshot을 비교하여 변경이 발생했는지를 추측한다.
- serializable 하다는 것은 리액트 컴포넌트가 랜더링 한 html을 예로 들 수 있다.
- div 안에 렌더 된 결과가 있을 때 스냡샷으로 저장하고 컴포넌트 변경이 있을 때 스냅샷끼리 비교해서 변경을 알 수 있다.
- jest의 주요 기능으로, 코드의 변경이 컴포넌트의 렌더링 결과에 영향을 미치는지를 파악하기에 적합하다.
- TDD 같은 경우에는 먼저 기능을 테스트로 정의하고 구현하는데, 스냅샷 테스팅은 결과를 테스트하기 때문에 내부 로직을 테스트하는 것과 상관없기 때문에 TDD와는 적합하지 않다.
📝 jest 함수의 실행 순서
- beforeAll, beforeEach, afterEach, afterAll의 순서로 Lifecycle 함수들이 실행된다.
- 다만, describe 블록 안에 있는 before-*, after-* 함수는 해당 블록의 범위 안에서 실행된다.
- describe 함수는 모든 test() 함수 이전에 실행된다. 따라서 test() 함수들은 순차적으로 한꺼번에 실행된다.
📝 테스팅의 구성
import { render } from "@testing-library/react";
test('User component', () => {
// setup
const mockProps = {
name: 'test-username',
age: 20
}
// expectation
const { container } = render(<User {...mockProps} />)
// assertion
expect(container.firstChild).toMatchSnapshot()
})
반응형
'프로그래밍 > testing' 카테고리의 다른 글
[react-testing-library] 유저 이벤트 (0) | 2022.01.17 |
---|---|
[react-testing-library] 쿼리의 우선순위 (0) | 2022.01.17 |
[react-testing-library] react-testing-library란? (0) | 2022.01.17 |
[Jest] Async assertion (0) | 2022.01.17 |
[Jest] Assertion Matchers 활용 (0) | 2022.01.17 |
댓글
이 글 공유하기
다른 글
-
[react-testing-library] 쿼리의 우선순위
[react-testing-library] 쿼리의 우선순위
2022.01.17 -
[react-testing-library] react-testing-library란?
[react-testing-library] react-testing-library란?
2022.01.17 -
[Jest] Async assertion
[Jest] Async assertion
2022.01.17 -
[Jest] Assertion Matchers 활용
[Jest] Assertion Matchers 활용
2022.01.17