inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트

react-cookie로 쿠키값 테스트코드로 가져오는 방법

582

suuu

작성한 질문수 2

2

 

describe('로그인이 성공했을 경우', () => {

  it('"아이디 저장" 체크박스를 체크했을 시 쿠키에 itall_admin 객체의 id key로 유저가 입력한 아이디를 저장한다.', async () => {
    const { user } = await render(<LoginPage />);
    const rememberIdCheckbox = screen.getByLabelText('아이디 저장');
    const idInput = screen.getByPlaceholderText('아이디(이메일)');
    const submitButton = screen.getByRole('button', { name: '로그인' });

    const setCookies = vi.fn();
    setCookies.mockReturnValueOnce('center.test@itall.com');
    const cookieValue = setCookies();

    await user.click(rememberIdCheckbox);
    await user.type(idInput, 'center.test@itall.com');
    await user.click(submitButton);

    expect(cookieValue).toBe('center.test@itall.com');
  })

})

Forms.spec.ts파일에서 js-cookie 라이브러리 모킹해서 하시는 예시를 보고 react-cookie 사용한 프로젝트의 테스트코드를 작성중인데요. 혹시 라이브러리에서 제공하는 함수를 이렇게 setCookies라는 함수를 임의로 모킹해서 return값을 지정해서 저렇게 처리해도 되는걸까요..? 테스트는 당연히 통과되었습니다..

javascript react 소프트웨어-테스트 vitest

답변 1

1

코드 조커, 오프

안녕하세요! 우선 강의 들어주셔서 감사합니다.

우선 저희 Form 코드와 작성해주신 코드의 의미가 약간 다른데요!

이 테스트에서 저희가 검증하고 싶은 것은 아래와 같을 것 같습니다.

  1. 값을 넣고 버튼을 눌렀을 때

  2. setCookie가 적절한 내용으로 호출이 된다.

결국 테스트 상 흐름으로는 아래와 같이 작성되어야 합니다.

  1. 폼을 렌더링 한 뒤

  2. 값을 입력하고 제출했을 때

  3. 쿠키에 제대로 세팅이 되는지

     

     

    저희가 작성한 테스트 코드는 아마 외부 라이브러리를 사용하기 때문에 setCookie() 메서드가 호출 되면 제대로 저장이 되었다고 가정을 해 테스트를 작성하게 됩니다. 여기서 spy가 사용되게 됩니다.

현재 작성해주신 코드는 Form과 관련된 모든 코드를 제거해도 테스트가 성공할 것입니다. 위 테스트 코드에서 영향을 주는 부분만 남겨봤는데 작성하고자 하는 테스트 흐름과 전혀 다른 부분만 남았죠?

describe('로그인이 성공했을 경우', () => {

  it('"아이디 저장" 체크박스를 체크했을 시 쿠키에 itall_admin 객체의 id key로 유저가 입력한 아이디를 저장한다.', async () => {
    const setCookies = vi.fn();
    setCookies.mockReturnValueOnce('center.test@itall.com');
    const cookieValue = setCookies();

    expect(cookieValue).toBe('center.test@itall.com');
  })
})

만약 예제와 비슷한 방향으로 검증하고 싶으시다면 setCookie를 하는 react-cookie 메서드에 spy를 걸고 제대로 호출되었는지를 검증하시면 비슷한 맥락으로 검증하실 수 있을 것 입니다.

추가로 궁금하신 점 있으시면 편하게 질문 남겨주세요!

1

suuu

답변 감사합니다!

import { useCookies } from 'react-cookie';
  
const [cookie, setCookie] = useCookies(['itall_admin']);

해당 react-cookie 라이브러리는 훅 기반 컴포넌트로 제공되고 있고 그 중 setCookie 함수를 호출하여 쿠키에 저장되게 되는데요.

그렇다면 테스트코드에서 커스텀훅을 테스트하는 방식으로 renderHook을 통해 useCookies를 모킹하는것이 맞을까요 아니면 기존 제가 했던 방식대로 setCookie 메서드에 spy 거는 방식이 맞는걸까요?

0

코드 조커, 오프

안녕하세요!

useCookies는 커스텀 훅이 아니라 라이브러리에서 제공해주는 훅이기 때문에 별다른 테스트를 작성할 필요가 없을 것 같습니다.

이 부분은 아직 혼란이 있으신 것 같으니 renderHook을 언제 사용할 수 있는지 다시 읽어보시는 것이 좋을 것 같습니다.

제가 해당 라이브러리를 사용해 본적이 없어 추측이지만 별개로 위와 같이 훅이 제공된다면, 모킹 없이 cookie 결과 자체를 검증하거나 검증이 불가능하다면 그때 spy 방식으로 검증하는 것이 좋아보입니다!

mockZustand

0

67

2

프로젝트 세팅 오류 및 버전 오류 문제 문의

0

97

2

toggleIsModalOpened 테스트 할때 궁금한 점이 있습니다.

0

43

2

로딩/에러처리 검증은 어떻게 하는게 좋을까요?

0

65

1

통합 테스트에서 API 요청에 대한 검증은 이루어지지 않아도 괜찮을까요?

0

71

2

lint에러..

0

74

1

단언문 순서에 따라 테스트 결과가 왜 달라지나요?

0

109

2

useNavigate 테스트 시, 검증 대상 질문입니다.

0

113

2

강의 예시프로젝트 업데이트좀 부탁드립니다.

2

166

2

통합테스트와 단위테스트 파일 분리

0

109

1

grid 양옆에 margin은 어디서 설정되어있는건가요 ?

0

131

1

vitest 설치했는데

0

207

2

2부 할인쿠폰 관련

0

177

1

에러 해결 방법

0

407

2

직접 구현한 atom 컴포넌트 테스트 범위 질문

0

175

1

setup, teardown 동작 순서

0

212

1

debounce 함수 테스트 정확도 관련 질문입니다.

0

177

2

ProductFilter test 어떤 방식이 더 선호되는 방식일까요?

0

204

2

통합 테스트 작성 방식에 대해 궁금한 점이 있습니다

0

259

2

vitest Extension 알려주세요.

0

268

1

2.1 강의 질문있습니다.

0

140

1

useNavigate()을 검증할 때 이해가 안되는 부분이 있습니다.

0

248

2

toHaveStyle 메서드 사용이 조금 이상한 것 같습니다.

0

196

2

TestPayment에 쿠폰 정보를 prop으로 전달하는 이유

0

186

2