목차
스냅 샷을 찍으십시오
이제 DOM 요소와 이벤트를 테스트합시다
이것은 React에서 테스트하는 한 가지 방법 일뿐입니다
웹 프론트엔드 CSS 튜토리얼 React Testing Library를 시작합니다

React Testing Library를 시작합니다

Apr 21, 2025 am 09:45 AM

React Testing Library를 시작합니다

다른 반응 테스트 라이브러리? CSS- 트릭 (실제로 농담과 효소에 관한 기사를 게시했습니다)에 너무 많은 것이 포함되어 있습니다. 충분한 옵션이 없습니까?

그러나 반응 테스트-서식은 다른 테스트 라이브러리 이상입니다. 테스트 라이브러리이지만 기본 원칙을 기반으로하여 다른 테스트 라이브러리와 다릅니다.

테스트가 소프트웨어 사용 방법을 시뮬레이션할수록 자신감이 커질 수 있습니다.

사용자가 앱 사용 방법 을 테스트하려고합니다. 실제로, 구성 요소를 리팩터링하더라도 테스트가 깨지지 않도록 구현됩니다. 나는 우리가 반응 여행의 어느 시점에서 이런 일이 일어났다는 것을 알고 있습니다.

우리는 반응 테스트 -Library를 사용하여 구축 한 간단한 할 일을 위해 테스트를 작성하는 데 시간을 보낼 것입니다. 로컬로 저장소를 복제 할 수 있습니다.

 git 클론 https://github.com/kinsomicrote/todoapp-test.git
로그인 후 복사

이렇게하면 필요한 패키지를 설치하십시오.

 ## 원사
원사 추가-Dev React-Testing-Library Jest-Dom

## npm
NPM 설치-사브 데브 리액 테스트-테스트-직접 농지 -MOD
로그인 후 복사

Jest가 왜 여기에 있는지 알고 싶다면 우리는 그것을 주장에 사용합니다. src 디렉토리에서 __test__ 라는 폴더를 만들고 App.test.js 라는 새 파일을 만듭니다.

스냅 샷을 찍으십시오

스냅 샷 테스트 변경 간의 차이점을 시각적으로 볼 수있는 방법으로 테스트 된 구성 요소에서 수행 된 레코드 테스트.

이 테스트를 처음 실행하면 구성 요소 모양의 첫 번째 스냅 샷을 찍습니다. 따라서 첫 번째 테스트는 확실히 통과됩니다. 왜냐하면 그와 비교할 다른 스냅 샷이 없기 때문입니다. 새로운 요소, 클래스, 구성 요소 또는 텍스트를 추가하여 구성 요소를 새로 변경할 때만 실패합니다. 스냅 샷이 만들어 졌을 때 또는 마지막 업데이트가 마지막으로 업데이트되었을 때 존재하지 않은 컨텐츠를 추가하십시오.

스냅 샷 테스트는 우리가 여기에서 작성한 첫 번째 테스트입니다. App.test.js 파일을 열고 다음과 같이 보이게하겠습니다.

 'React'에서 React React;
"React-Testing-Library"에서 {render, cleanup} 가져 오기;
"Jest-Dom/Extend-Expect"가져 오기;
'./app'에서 앱 가져 오기;

Afterach (정리);

it ( "스냅 샷 일치", () => {
  const {asfragment} = render (<app></app> );
  기대 (asfragment ()). tomatchsnapshot ();
});
로그인 후 복사

이것은 테스트를 작성하고 실행하는 데 필요한 패키지를 가져옵니다. render 테스트하려는 구성 요소를 표시하는 데 사용됩니다. afterEach(cleanup) 라인에서 볼 수 있듯이 각 테스트 실행 후 컨텐츠를 지우기 위해 cleanup 사용합니다.

asFragment 사용하여 렌더 구성 요소의 DocumentFragment 얻습니다. 그런 다음 생성 된 스냅 샷과 일치 할 것으로 기대합니다.

테스트를 실행하여 어떤 일이 발생하는지 확인합시다.

 ## 원사
원사 테스트

## npm
NPM 테스트
로그인 후 복사

아시다시피, 이것이 첫 번째 테스트 인 경우 __tests__ 디렉토리 내부의 __snapshots__ 라는 새 폴더에서 구성 요소 스냅 샷이 생성됩니다. 우리는 실제로 App.test.js.snap 이라는 파일을 가져 오면 다음과 같습니다.

 // Jest Snapshot v1, https://goo.gl/fbaqlp

내보내기 [`스냅 샷 1`] =`
<documentfragment><div>
    <div>
      <div>
        <h2>
          Todo를 추가하십시오
        </h2>
      </div>
    </div>

      <div>
        <div>
          </div>
      </div>
      <div>
        <div>

            작업을 추가하십시오

        </div>
      </div>

    <div>
      <div>
        <h3>
          기울기
        </h3>
        <ul data-test="">
<li>
            <div>
              우유를 사십시오

                엑스

            </div>
          </li>
          <li>
            <div>
              튜토리얼을 작성하십시오

                엑스

            </div>
          </li>
        </ul>
</div>
    </div>
  </div>
</documentfragment>
`;;
로그인 후 복사

이제 DOM 요소와 이벤트를 테스트합시다

응용 프로그램에는 응용 프로그램이 처음 실행될 때 기본적으로 표시되는 할 일 항목이 포함되어 있습니다. 첫 번째 응용 프로그램이 실행될 때 표시가 표시되도록하고 싶습니다.이를 테스트하려면 순서가없는 목록을 찾아야합니다 (<ul></ul> ) 그리고 길이를 확인하십시오. 우리는 길이가 2와 같을 것으로 예상합니다.

 ( '기본 TODO 항목을 표시합니다', () => {
  const {getByTestId} = render (<app></app> );
  const todolist = getbytestid ( 'todos-ul');
  expect (todolist.children.length) .tobe (2);  
});
로그인 후 복사

이 코드 스 니펫에서 getByTestId 사용하여 App 구성 요소에서 테스트 ID를 추출합니다. 그런 다음 todos-ul 요소를 찾도록 todoList 설정했습니다. 이것은 2를 반환해야합니다.

지금까지 배운 것을 사용하여 사용자가 입력 필드에 값을 입력 할 수 있다고 주장하는 테스트를 작성할 수 있는지 확인하십시오. 다음은해야 할 조치입니다.

  • 입력 필드를 얻으십시오
  • 입력 필드에 대한 값을 설정합니다
  • 변경 이벤트를 트리거합니다
  • 입력 필드의 값이 2 단계에서 설정 한 값과 동일하다고 주장합니다.

아래의 대답을 들여다 보지 마십시오! 가능한 한 많은 시간을 보내십시오.

아직도 계속되고 있습니까? 기이! 나는 커피 한 잔을 마시고 곧 돌아올 것이다.

음, 커피. ☕️

오, 당신은 끝났습니다! 당신은 굉장합니다. 답을 비교해 봅시다. 내 것 같아요 :

 it ( '입력 허용', () => {
  const {getBytestid, fireevent} = render (<app></app> );
  항목 = '반응을 배우십시오';
  const todoinputeLement = getByTestId ( 'todo-input');
  TODOINPUTELEMENT.VALUE = 항목;
  fireeevent.change (todoinputelement);
  expling (todoinputeLement.value) .tobe ( 'legr react');
});
로그인 후 복사

getByTestId 사용하여 응용 프로그램에서 테스트 ID를 추출 할 수있었습니다. 그런 다음 변수를 생성하고 문자열 "Learn React"로 설정하고 입력 필드의 값으로 만듭니다. 다음으로 테스트 ID를 사용하여 입력 필드를 얻고 입력 필드의 값을 설정 한 후 변경 이벤트를 트리거합니다. 이 작업을 수행 한 후, 입력 필드의 값은 실제로 "반응을 배우십시오"라고 주장합니다.

이것이 귀하의 답변과 일치합니까? 다른 방법이 있으면 의견을 남겨주세요!

다음으로, 새로운 할 일 항목을 추가 할 수 있는지 테스트합시다. 새로운 프로젝트를 만드는 데 필요한 모든 요소이기 때문에 입력 필드, 새 프로젝트를 추가하려면 버튼을 가져와야합니다.

입력 필드의 값을 설정 한 다음 버튼을 트리거하여 작업을 추가합니다. getByText 사용하여 버튼을 가져 오면이 작업을 수행 할 수 있습니다. 텍스트 "Add Task"로 DOM 요소의 클릭 이벤트를 트리거하여 새로운 할 일 항목을 추가 할 수 있어야합니다.

순서가없는 목록 요소의 자식 요소 (목록 항목)의 수는 3과 같다고 주장합시다. 이는 기본 작업이 여전히 손상되지 않았다고 가정합니다.

 It ( '새로운 TODO 항목 추가', () => {
  const {getBytext, getBytestid, fireevent} = render (<app></app> );
  const todoinputeLement = getByTestId ( 'todo-input');
  const todolist = getbytestid ( 'todos-ul');
  TODOINPUTELENT.VALUE = 'LEARN REACT';
  fireeevent.change (todoinputelement);
  fireeevent.click (getByText ( 'Add Task'));
  expect (todolist.children.length) .tobe (3); 
});
로그인 후 복사

아주 좋아요?

이것은 React에서 테스트하는 한 가지 방법 일뿐입니다

다음 React Application에서 React-Testing-Library를 사용해 볼 수 있습니다. 창고의 문서는 매우 상세하며 대부분의 도구와 마찬가지로 시작하기 가장 좋은 곳입니다. Kent C. Dodds는이를 구축했으며 Frontend Masters (구독 필요)에서 테스트에 대한 전체 코스가 있으며, 이는 반응 테스트-서식의 INS를 포함합니다.

즉, 이것은 REACT의 테스트 리소스 일뿐입니다. 물론 다른 리소스가 있지만, 현재 일부 콘텐츠를보고 시도해 보는 데 관심이 있기를 바랍니다. 물론 프로젝트에 가장 적합한 리소스를 사용해야합니다.

위 내용은 React Testing Library를 시작합니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Google 글꼴 변수 글꼴 Google 글꼴 변수 글꼴 Apr 09, 2025 am 10:42 AM

Google Fonts가 새로운 디자인 (트윗)을 출시 한 것을 볼 수 있습니다. 마지막 큰 재 설계와 비교할 때 이것은 훨씬 더 반복적 인 느낌이 듭니다. 차이를 간신히 말할 수 있습니다

HTML, CSS 및 JavaScript로 애니메이션 카운트 다운 타이머를 만드는 방법 HTML, CSS 및 JavaScript로 애니메이션 카운트 다운 타이머를 만드는 방법 Apr 11, 2025 am 11:29 AM

프로젝트에 카운트 다운 타이머가 필요한 적이 있습니까? 그런 것은 플러그인에 도달하는 것이 당연하지만 실제로는 훨씬 더 많습니다.

HTML 데이터 속성 안내서 HTML 데이터 속성 안내서 Apr 11, 2025 am 11:50 AM

HTML, CSS 및 JavaScript의 데이터 속성에 대해 알고 싶었던 모든 것.

Sass를 더 빨리 만들기위한 개념 증명 Sass를 더 빨리 만들기위한 개념 증명 Apr 16, 2025 am 10:38 AM

새로운 프로젝트가 시작될 때, Sass 컴파일은 눈을 깜박이게합니다. 특히 BrowserSync와 짝을 이루는 경우 기분이 좋습니다.

SVG에서 타탄 패턴을 생성하는 정적 사이트를 만드는 방법 SVG에서 타탄 패턴을 생성하는 정적 사이트를 만드는 방법 Apr 09, 2025 am 11:29 AM

타탄은 일반적으로 스코틀랜드, 특히 세련된 킬트와 관련된 패턴의 천입니다. tartanify.com에서 우리는 5,000 개가 넘는 타탄을 모았습니다

WordPress 테마에서 VUE 구성 요소를 빌드하는 방법 WordPress 테마에서 VUE 구성 요소를 빌드하는 방법 Apr 11, 2025 am 11:03 AM

Inline-Template 지시문을 사용하면 기존 WordPress 마크 업에 대한 진보적 인 향상으로 풍부한 VUE 구성 요소를 구축 할 수 있습니다.

PHP는 템플릿을위한 A-OK입니다 PHP는 템플릿을위한 A-OK입니다 Apr 11, 2025 am 11:04 AM

PHP 템플릿은 종종 서브 파 코드를 용이하게하는 데 나쁜 랩을 얻지 만, 그렇지 않아야합니다. PHP 프로젝트가 기본을 시행 할 수있는 방법을 살펴 보겠습니다.

정적 양식 공급자의 비교 정적 양식 공급자의 비교 Apr 16, 2025 am 11:20 AM

"정적 양식 공급자"라는 용어를 동전하려고합시다. 당신은 당신의 HTML을 가져옵니다

See all articles