react-cookie로 쿠키값 테스트코드로 가져오는 방법
582
작성한 질문수 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값을 지정해서 저렇게 처리해도 되는걸까요..? 테스트는 당연히 통과되었습니다..
답변 1
1
안녕하세요! 우선 강의 들어주셔서 감사합니다.
우선 저희 Form 코드와 작성해주신 코드의 의미가 약간 다른데요!
이 테스트에서 저희가 검증하고 싶은 것은 아래와 같을 것 같습니다.
값을 넣고 버튼을 눌렀을 때
setCookie가 적절한 내용으로 호출이 된다.
결국 테스트 상 흐름으로는 아래와 같이 작성되어야 합니다.
폼을 렌더링 한 뒤
값을 입력하고 제출했을 때
쿠키에 제대로 세팅이 되는지
저희가 작성한 테스트 코드는 아마 외부 라이브러리를 사용하기 때문에 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
답변 감사합니다!
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





