assertion matchers (.toBe .toEqual)
async assertion
mock functions
testing lifecycle functions
grouping
snapshot testing
jest는 풍부한 matcher 제공, 여러 상황에서 match를 체크.
expect()는 expectation object 리턴
jest는 풍부한 matcher를 제공하여, 여러 상황에서 match를 체크함
expect()는 expectation object를 리턴한다. 이 object의 메서드를 이용해 여러 매칭 상황을 assert함.
비동기 상황의 테스트를 처리할 수 있는 방법을 제공
callback, promise, async/await을 모두 활용 가능.
mock function을 만듦
모듈 전체를 mocking 함
라이브러리 전체를 mocking함
각 테스트의 시작과 끝, 전체 테스트의 시작과 끝에 원하는 작업을 할 수 있음.
beforeEach, afterEach, beforeAll, afterAll 함수를 활용함.
describe 블록 안에 사용하면 별도의 scope를 가짐.
describe 함수를 이용해 여러 test() 함수를 논리적으로 나눔
describe 함수 안에 describe 함수가 중첩될 수 있음
특정 함수, 모듈, 컴포넌트 등의 결과를 serializable 한 형태의 snapshot으로 저장하고, 추후 변경이 발생했을 때 이전의 snapshot과 새로운 snapshot을 비교하여 변경이 발생했는지를 추측함.
jest의 주요 기능으로, 코드의 변경이 컴포넌트의 렌더링 결과에 영향을 미치는지를 팡가하기 적함함.
beforeAll, beforeEach, afterEach, afterAll의 순서로 Lifecycle 함수들이 실행됨.
다만 describe 블록 안에 있는 before-, after-함수는 해당 블록의 범위 안에서 실행됨.
describe 함수는 모든 test()함수 이전에 실행된다. 따라서 test() 함수들은 순차적으로 한꺼번에 실행됨.
테스트가 소프트웨어가 사용되는 모습을 더 닮을수록 테스트를 더욱 신뢰 할 수 있게 됨.
컴포넌트의 특성 메서드나 상태를 테스트하는게 아니라, 실제 유저가 사용하는 방식대로 테스트하는 접근
유저가 어떤 DOM요소에 접근하는 방법을 흉내냄
이 방식대로 테스트 코드를 작성하면, 내부 구현이 바껴도 테스트가 깨지지 않음.
React컴포넌트가 렌더링한 결과에 대한 접근만 가능함.
쿼리는 내부 상태나 내부 메서드에 접근 할 수 없게 설계됨.
getBy : 원하는 요소를 찾지 못할 경우, 여러개의 요소를 찾을 경우 에러
getAllBy : 여러 요소를 찾아 배열을 반환. 원하느 ㄴ요소를 찾지 못하면 에러
findBy : 여러 원소를 찾거나, 정해진 timeout 동안 찾지 못하면 에러를 던짐.
findAllBy 관련 커리는 여러 원소를 검색해 배열을 반환함. 정해진 timeout동안 찾지 못하면 에러를 던짐
Promise를 리턴, 실패시 reject, 성공시 resolve
어떤 유저의 동작 후에 등장하는 원소 등을 테스트하고자 할 때 활용함.
findAllBy
queryBy 관련 쿼리는 getBy와 비슷하게 원소를 찾아 반환하나, 못찾을 경우 에러를 던지지 않고 null을 반환함. 여러 원소를 찾으면 에러를 던짐.
queryAllBy관련 쿼리는 getAllBy와 비슷하게 여러개의 원소를 찾아 배열로 반환하거나, 하나도 찾지 못하면 에러 대신 빈 배열을 반환함.
특정 요소를 찾을 수 없음을 assertion의 기준으로 둘 때 활용됨.
container는 컴포넌트를 렌더링한 결과를 감싸는 원소
queryselector(), querySelectorAll()을 이용해 selector 문법으로 원소를 선택할 수 있음.
react-testing-library는 jest를 확장하여 좀 더 쓰기 편한 assertion을 제공함.
toBeInTheDocument(), toHaveValue(), toBeDisabled(), toBeVisible() 등, DOM 테스팅에 특히 유용한 assertion 메소드를 제공함.
유저가 페이지를 이동하는 방식에 가까운 쿼리일수록 우선 순위가 높음
접근성 높은 HTML을 작성할 수록 테스트가 용이한 코드가 됨.
accessiblity tree에 있는 요소들을 기준으로 원소를 찾음
유저가 웹 페이지를 사용하는 방식을 가장 닮은 쿼리
동일한 role을 가진 경우, accessible name을 이용해 원소를 구별함.
임의로 role 혹은 aia-*을 부여하는 것을 지양함
자주 사용되는 Role : button, checkbox, listiem, heading, img, form, textbox, link
자주 사용되는 accessible name : button(텍스트) , label(텍스트), a(텍스트), img(alt 텍스트)
유저가 볼 수 있는 Text값을 기준으로 쿼리를 찾음.
ByLabelText - label과 관련된 원소를 찾음.
ByPlaceHolderText - placeHolder와 연관된 원소를 찾음
ByText - 주어진 Text와 연관된 원소를 찾음.
ByDisplayValue - input, textarea, select 등의 value를 기준으로 원소를 찾음.
유저에게 보이지 않지만, 접근성 스펙에 적합한 alt, title을 이용하여 원소를 겁색함.
ByAltText - img, area, input등의 alt 속성으로 원소를 검색함.
ByTitle - title 속성으로 원소를 검색함.
data-testid 속성을 원하는 원소에 지정하고, 쿼리를 이용해 찾음
유저가 해당 속성을 기반으로 화면의 요소를 찾는게 아니므로 우선순위가 낮음.
다른 쿼리로 테스트를 작성할 수 없을 때 이 쿼리를 백도어로 활용함.
내장 이벤트 함수인 fireEvent, createEvent를 좀 더 직관적이고 범용적으로 사용할 수 있도록 만든 라이브러리. click, type, keyboart, upload hover, tab등 유저가 실제로 웹페이지를 사용하며 만드는 이벤트를 메서드로 제공함.