기본 테스트 컨테이너 변경

6995 단어 testing
기본 테스트에서 라이브러리는 먼저 div를 적용할 본문에 렌더링을 추가합니다.

형식은 다음과 같습니다.

<body>
  <div>
    <YourComponent />
  </div>
</body>


그러나 경우에 따라 다른 시나리오를 테스트해야 할 수도 있습니다.

지금까지 다룬 두 가지를 적어 보겠습니다.
  • 사용자 정의 구성 요소 래퍼(사용자 정의 요소)
  • HTML 기반 전자 메일(표 레이아웃으로 래핑됨)

  • 이러한 경우 다른 유형의 래퍼를 정의하려고 합니다.

    새 포장 용기 정의



    예를 들어 previous article 을 봅시다. 테이블에서 App를 렌더링하려면 어떻게 해야 합니까?

    현재 테스트 설정은 다음과 같습니다.

    const renderComponent = ({ username }) => {
      return render(
        <UserContextProvider user={username}>
          <App />
        </UserContextProvider>
      );
    };
    
    it('should show the login option', async () => {
      renderComponent('');
      expect(screen.queryByText('Please login')).toBeInTheDocument();
    });
    


    지금까지 이상한 점은 없었습니다. 이 코드를 디버깅할 때 다음과 같은 HTML 출력이 제공됩니다.

    <body>
      <div>Please login</div>
    </body>
    


    이제 Table 를 추가하는 방법을 살펴보겠습니다.
    이것이 작동하려면 container 라는 렌더링 함수에 선택적 매개변수를 전달해야 합니다.

    const renderComponent = ({ username }) => {
      const table = document.createElement('table');
      return render(
        <UserContextProvider user={username}>
          <App />
        </UserContextProvider>,
        {
          container: document.body.appendChild(table),
        }
      );
    };
    


    위의 코드를 실행하면 table 에 텍스트 노드를 직접 추가할 수 없으므로 오류가 발생합니다.

    그러나 이제 우리가 테스트하고 있는 구성 요소가 TableBody 구성 요소라고 상상해 보십시오. 테이블 내부에서 테스트하는 것이 좋습니다.

    출력은 다음과 같습니다.

    <table>
      <TableBodyComponent />
    </table>
    


    맞춤 요소 테스트



    제 경우에는 최근에 사용자 지정 구성 요소 래퍼를 테스트해야 했습니다. 이것은 주로 Shadow DOM에 특별히 무언가를 주입했기 때문입니다.

    이에 대한 프로세스는 매우 유사합니다. 그러나 사용자 정의 요소를 새 태그로 정의합니다.

    const renderComponent = ({ username }) => {
      const customTag = document.createElement('custom-tag');
    
      return render(
        <UserContextProvider user={username}>
          <App />
        </UserContextProvider>,
        {
          container: document.body.appendChild(customTag),
        }
      );
    };
    


    이제 출력은 다음과 같습니다.

    <custom-tag> Please login </custom-tag>
    


    대부분의 구성 요소에는 다른 컨테이너가 필요하지 않지만 이렇게 하면 컨테이너를 더 쉽게 정의할 수 있는 예외가 있습니다.

    읽어주셔서 감사합니다. 연결합시다!



    제 블로그를 읽어주셔서 감사합니다. 내 이메일 뉴스레터를 구독하고 Facebook에 연결하거나

    좋은 웹페이지 즐겨찾기