inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

부트캠프에서 알려주지 않는 것들 (리액트) 1편

test 코드 작성시 질문

해결된 질문

481

김민석

작성한 질문수 1

0

vite를 사용하고 있으며 현재 촐더 구조입니다.

현재 jest.setup.ts 파일내용입니다. (챗 gpt에게 물어본 결과 setupTest.ts로 바꿔야한다는 답변을 받았지만 꼭 바꿔야하는지 잘모르겠습니다.)

import "@testing-library/jest-dom"

import { server } from "./src/mocks/server"

beforeAll(() => server.listen())

afterEach(() => server.resetHandlers())

afterAll(() => server.close())

 

msw를 사용 하기위해 필요한 설정을 해놓았습니다.

다음은 테스팅을 위한 컴포넌트 입니다.

import axios from "axios"
import React, { useEffect, useState } from "react"

const Direction: React.FC = () => {
  const [data, setData] = useState<any>({})
  const [isLoading, setIsLoading] = useState(true)

  useEffect(() => {
    void (async () =>
      setData(await (await axios("https://jsonplaceholder.typicode.com/todos/1")).data))()
    setIsLoading(false)
  }, [])
  return (
    <>
      {isLoading ? (
        <div>loading...</div>
      ) : (
        <ul>
          <li>{data.id} / </li>
          <li>{data.title} /</li>
          <li>{data.userId} /</li>
        </ul>
      )}
    </>
  )
}

export default Direction

보시는 것처럼 데이터를 불러와서 화면에 표시하는 컴포넌트 입니다.

 

다음은 테스트 케이스 입니다.

import { render, screen } from "@testing-library/react"
import Direction from "."

test("Direction 컴포넌트가 정상적으로 렌더링되는지 테스트", async () => {
  render(<Direction />)
  const result = await screen.findAllByRole("listitem")
  expect(result).toHaveLength(3)
})

해당 코드를보시면 간단해서 에러없이 깔끔하게 성공합니다.

하지만 프로젝트에서 swr을 사용하기로 했는데 여기서 문제가 발생합니다.

import React from "react"
import useSWR from "swr"

const Direction: React.FC = () => {
  const { isLoading, data } = useSWR("https://jsonplaceholder.typicode.com/todos/1")
  return (
    <>
      {isLoading ? (
        <div>loading...</div>
      ) : (
        <ul>
          <li>{data.id} / </li>
          <li>{data.title} /</li>
          <li>{data.userId} /</li>
        </ul>
      )}
    </>
  )
}

export default Direction

컴포넌트를 swr을 사용하는 방식으로 바꾸고 테스트를 실행해보면 findAllByRole에서 listitem을 찾을수 없다는 에러가 발생합니다.

swr의 특성인거같긴한데 도무지 해결방안이 떠오르지 않습니다.

react-query나 swr같은 캐싱라이브러리를 사용하면서 msw를 사용하여 테스트를 하고 싶은데 따로 설정해야하는 것들이나 권장되는 코드 작성 방식이 따로 있나요?

그것이아니라면 어떤부분을 수정해야 제대로 작동할까요?

react tdd React-Context jest 소프트웨어-테스트

답변 1

0

애프터캠프

안녕하세요 민석님 혹시 해당 코드 깃헙으로 공유해주실 수 있을까요?

0

김민석

해당코드 링크입니다. https://github.com/skweedCont/pre-project

master브랜치가 swr로 인해 테스트 케이스에서 에러가 발생하는 코드

그리고 copy브랜치가 swr로 변경전 테스트 케이스를 통과하는 코드입니다.

테스트 케이스에서 에러가 발생하는 파일의 경로는 src/pages/direction안에 있습니다.

1

애프터캠프

test("Direction 컴포넌트가 정상적으로 렌더링되는지 테스트", async () => {
  render(
      <SWRConfig
          value={{
            fetcher: async (url) => await (await axios(url)).data
          }}
      >
      <Direction />
      </SWRConfig>
        )
  const result = await screen.findAllByRole("listitem")
  expect(result).toHaveLength(3)
})

테스트 코드에서도 <SWGConfig> 컴포넌트로 감싸주셔야 Direction 컴포넌트 내부에서 useSWR을 사용할 수 있습니다.

 

1

김민석

2~3일정도 앓았던건데 감사합니다.ㅠㅠ

다음에 막히는게 있으면 질문하러 오겠습니다. ㅠㅠㅠ

챌린지 시작일 문의

0

10

0

줄바꿈 시 \ 필수인가요?

0

13

2

2605 이후 최신 클로드코드 강의 추가 부탁드립니다.

0

11

2

커리큘럼 문서 제공받을 수 있을까요?

0

18

1

ThemeProvider를 이용해서 NextThemeProvider를 따로 생성하여 Layout.tsx에 적용하는 이유는 뭘까요?

0

12

1

mission 09-01 을 수행할 수 없어요

0

18

1

outputStyle 설정하는데 어디서 문제일까요?

0

21

3

test.txt파일 삭제시 rm명령어이니 클로드의 질문이 있어야 한다고 하셨는데

0

13

2

검은화면

0

22

3

강의교환링크안열려요.....

0

22

2

영상재생에러 [확인부탁드려요!!!]

0

20

2

클로드 채팅에서 코드로 넘어가기

0

34

2

Context API vs Zustand 그리고 Auth

0

34

2

110강부터 따라가기가 힘듭니다...

0

49

2

커서에서 붙여넣기

0

35

2

깃허브 사용시 폴더경로 관련질문

0

23

2

강의 마지막이 잘려있는것 같습니다

0

95

2

전부 입력된 코드들만 있는건가요? 따라치면서 하고싶은데...

1

306

1

코드 샌드박스 안되는거같습니다

1

316

1

공유소스 실행시 에러 문의 드립니다~

1

441

1

[섹션 3. Form 컴포넌트로 배우는 실전 기술] 강좌의 소스를 부탁드립니다.

0

314

1

마지막 onSubmit 에러체크 문제

1

414

1

코드샌드박스 주소

1

517

1

TDD - Green, Red, Refactor

1

689

2