inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

따라하며 배우는 리액트 테스트 [2023.11 업데이트]

Mock Service Worker

안녕하세요! 핸들러들을 리셋하는것에 대해서 궁금한게 있습니다.

267

Glitch

작성한 질문수 3

1

강의 너무 잘 듣고있습니다 :)

 

선생님이 목서버를 설정해주실때 3가지를 설정해주셨는데

그 중에서 2번째인

" 테스트 중에 추가한 Request 핸들러들이 다른 테스트를 방해하지 않게 하기 위해 리셋을 해준다" 라고 하였는데, 

이때 방해를 하는 상황이 어떤것이고 이것을 리셋안하게 되면 어떠한 현상이 일어나는건가요..?

단순하게 왜 리셋을 하는지는 알겠는데 그 하는 이유가 제가 아직 경험하지 못한 상황이라 궁금합니다!

테스팅 jest 모킹 react React-Context 웹앱

답변 1

3

John Ahn

안녕하세요 좋은 질문 감사합니다 !! 

우선 여기에 코드를 보면 

test("when fetching product datas, face an error", async () => {
server.resetHandlers(
rest.get("http://localhost:5000/products", (req, res, ctx) => {
return res(ctx.status(500));
})
);

render(<Type orderType="products" />);

const errorBanner = await screen.findByTestId("error-banner");
expect(errorBanner).toHaveTextContent("에러가 발생했습니다.")
});

resetHandlers를 이용해서 일부로 에러를 만들었습니다. 
에러를 만들때 원래 서버에서 보내줘야할 products 데이터를 없애고 에러 코드를 500을 줘서 서버에서 에러를 받게 한거인데요.

그러면 제가 이 테스트 아래에다가 

test("displays product images from server", async () => {
render(<Type orderType="products" />);

// 이미지 찾기
const productImages = await screen.findAllByRole("img", {
name: /product$/i,
});
expect(productImages).toHaveLength(2);

const altText = productImages.map((element) => element.alt);
expect(altText).toEqual(["America product", "England product"]);
});

이 테스트를 추가하면 어떻게 될까요? 
에러가 안납니다.  왜냐면 products를 가져올 때 이미 resetHandlers가 돌아가서 500에러를 보내주는게 아닌 올바른 products 데이터를 가져오기 떄문입니다.  하지만 

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

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

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

이렇게 주석처리를 한 후 다시 테스트를 하면 에러가 나겠죠 ! 왜냐면 해당 테스트에서 필요한 products 데이터가 없기 때문입니다 ! 

수고하세요 ~!! 

제공해주신 코드를 vscode에서 켜도 eslint가 안됩니다.

0

296

2

ERROR

0

217

1

테스트 시간을 단축할 수 있는 방법에 대하여 문의드립니다.

0

370

1

useState 배열값 변경의 경우 테스트 멈춤

0

424

1

test was not wrapped in act관련 질문

0

300

2

안녕하세요! 로딩 상태 테스트에 관련된 질문입니다.

0

400

1

강의 관련 내용 github 업로드 질문

0

312

1

이미지가 안보인다 하셔서 다시 질문드립니다.

0

420

2

Test Fail이 발생합니다 ㅠㅠ

0

364

1

스타일 컴포넌트 테스트 방법

0

441

1

msw 에러

0

646

1

toHaveTextContent 에러

0

455

1

msw안돼는사람

0

588

1

This could be because the text is broken up by multiple elements. 에러

0

1723

2

Type.test.js파일에 궁금한점이 생겼습니다

0

354

1

28강 수강 중 JSX 작성 방법에 대해 궁금해져서 질문 남깁니다!

0

406

1

toHaveTextContent 에서 에러가 자꾸 나는데 아무리 찾아도 잘 모르겠습니다.

0

618

2

aria-*

0

451

1

This XML file does not appear to have any style information associated with it. The document tree is shown below. 에러

1

14169

1

컴포넌트 props내려줄때 코드는 어떻게 해야하나요

0

252

0

es6 jest 미지원 오류 문의

0

866

1

test 여러 개 실행 - fail 발생

0

294

1

useMemo

0

286

1

axios 1.1.2 버전 issue ( SyntaxError: Cannot use import statement outside a module)

4

2237

5