Jest DOM 테스트

Jest DOM

RTL은 jest-dom 라이브러리의 사용법에 따라 매처(matchers)를 추가해 테스트를 수행합니다. 테스트 스위트(Suite)는 여러 테스트 케이스(Case)를 포함할 수 있지만, 케이스가 반드시 스위트 안에 포함되어야 하는 것은 아닙니다.

아래 코드는 테스트 스위트 안에 테스트 케이스를 포함하는 간단한 예입니다.

테스트 시나리오

만들어야 할 로직을 테스트 하는 파일을 먼저 만듭니다.

.toContain() 메서드는 배열 아이템 포함 여부를 검사할 때 사용합니다.

테스트 결과는 FAIL이 나올겁니다. 아직 로직을 짜기 전이기 때문이죠.

테스트 결과가 PASS가 되도록 코드 로직을 작성합니다.

테스트 결과 PASS 되면 성공입니다. 테스트를 통해 "기대" 값과 "실제" 값이 같음을 입증했고, 신뢰할 수 있습니다.

테스팅 파일 이름 규칙

Jest는 다음의 이름 규칙으로 테스트 파일을 찾아 테스팅을 수행합니다.

  • __tests__ 폴더 안의 .js 접미사가 있는 파일

  • .test.js 접미사가 있는 파일

  • .spec.js 접미사가 있는 파일

테스트 파일 위치

테스트 할 함수와 동일한 위치에 테스트 파일을 포함하는 것이 좋습니다. 테스트 할 파일에서 테스팅 할 파일을 불러오는 경로가 단순해져 관리가 쉽기 때문입니다.

어설션(Assertion) 함수

toBeNull(), toBeInTheDocument()와 같은 어설션 함수를 말합니다. 각 어설션 함수(커스텀 매처)에 대한 상세한 사용법은 Custom Matchers 문서를 참고하세요.

toBeDisabled()

비할성(disabled) 요소인지 여부를 검사합니다.

toBeEnabled()

not.toBeDisabled()와 동일합니다.

toBeEmpty()

요소가 포함하는 자식 노드를 포함하지 않는 지 여부를 검사합니다.

toBeEmptyDOMElement()

요소에 표시되는 콘텐츠가 없는 지 여부를 검사합니다. 주석은 무시하지만, 요소에 공백이 있으면 실패합니다.

toBeInTheDocument()

문서에 요소가 포함되어 있는 지 여부를 검사합니다.

toBeInvalid()

요소가 유효한 지 여부를 검사합니다. 값이 없는aria-invalid 속성을 가지고 있거나 "true" 값이 설정된 경우, checkValidity() 결과 값이 false인 경우 요소가 유효하지 않은 것으로 판단합니다.

toBeRequired()

폼 요소가 필수 입력을 요구하는 지 여부를 검사합니다. required 또는 aria-required="true" 속성을 가진 경우 검사를 통과합니다.

toBeValid()

요소가 유효한 지 여부를 검사합니다. 값이 없는aria-invalid 속성을 가지고 있지 않거나 "false" 값이 설정된 경우, checkValidity() 결과 값이 true인 경우 요소가 유효한 것으로 판단합니다.

toBeVisible()

요소가 사용자에게 보이는 지 여부를 검사합니다. 다음 요건에 모두 충족하면 검사를 통과합니다.

  • 요소가 문서에 포함되어 있습니다.

  • 요소의 display 스타일 속성 값이 none이 아닙니다.

  • 요소의 visibility 스타일 속성 값이 hidden 또는 collapse가 아닙니다.

  • 요소의 opacity 스타일 속성 값이 0 보다 큽니다.

  • 요소에 hidden 속성이 설정되지 않았습니다.

  • 요소를 포함하는 상위 요소가 문서에 포함되고, 보여야 합니다.

  • <details /> 요소의 open 속성이 설정되어 있습니다.

toContainElement()

요소가 다른 요소를 포함하는 지 여부를 검사합니다.

toContainHTML()

요소가 HTML 요소를 표현하는 문자열을 포함하는 지 여부를 검사합니다.

아마도 이 매치를 사용할 필요가 없을 것입니다.

toHaveAttribute()

요소가 특정 속성을 포함하는 지 여부를 검사합니다. expect.stringContaining 또는 expect.stringMatching을 사용해 속성에 특정 기대 값 또는 부분 일치가 있는지 선택적으로 확인할 수 있습니다.

toHaveClass()

요소가 특정 class 이름을 가지고 있는 지 여부를 검사합니다. (정확한 검사가 필요한 경우 {exact: true} 설정)

toHaveFocus()

요소에 현재 포커스(초점) 이동이 되어 있는 지 여부를 검사합니다.

toHaveFormValues()

폼에 name 속성이 지정된 폼 컨트롤을 포함하고 있고, 지정된 값을 가지고 있는 지 여부를 검사합니다.

자세한 사용법은 공식 문서에서 안내하는 toHaveFormValue()를 참고하세요.

toHaveStyle()

요소에 특정 값이 적용 된 특정 CSS 속성이 있는 지 여부를 검사합니다. 요소 중 일부가 아닌, 모든 예상 속성이 적용되는 경우에만 일치합니다.

계산 된 CSS 스타일 결과 값 반영

문서에서 현재 사용 중인 스타일시트에 정의 된 일부 규칙이 클래스 이름을 통해 요소에 적용되는 규칙에서도 작동합니다. 일반적인 CSS 우선 순위 규칙이 적용됩니다.

toHaveTextContent()

요소에 텍스트 내용이 포함되어 있는 지 여부를 검사합니다. 문자열 인자가 전달되면 요소 내용에 대해 부분 대/소문자를 구분하는 매치가 수행됩니다. 대/소문자를 구분하지 않는 매치를 수행하려면 정규 표현 식을 사용합니다.

toHaveValue()

폼 컨트롤 요소에 지정 된 값이 있는지 여부를 검사합니다.

toHaveDisplayValue()

폼 컨트롤 요소에 지정 된 표시 값(사용자에게 보여지는 값)을 포함하는 지 여부를 검사합니다.

toBeChecked()

폼 컨트롤(radio, checkbox) 요소가 체크된 상태인 지 여부를 검사합니다.

toBePartiallyChecked()

폼 컨트롤(checkbox) 요소가 부분적으로 체크되었는 지 여부를 검사합니다.

toHaveDescription()

요소에 설명이 있는 지 여부를 검사합니다. aria-describedby 속성에 연결된 요소가 설명 내용을 포함합니다.

Last updated

Was this helpful?