nori-dongsan / nori-client

๐Ÿ’šnori-dongsan๐Ÿ’š Client์˜ ํผ๋ ˆ์ด๋“œ๋กœ ์—ฌ๋Ÿฌ๋ถ„์„ ์ดˆ๋Œ€ํ•ฉ๋‹ˆ๋‹ค ๐Ÿฅณ๐Ÿฅณ๐Ÿฅณ๐Ÿฅณ
https://www.with-nori.com/
6 stars 2 forks source link

[ Develop ] MSW ์‚ฌ์šฉ๋ฒ• #25

Open Happhee opened 2 years ago

Happhee commented 2 years ago

๐Ÿ’š Mocks Service Worker

MSW๋Š” Mock Service Worker๋กœ ์„œ๋น„์Šค ์›Œ์ปค๋ฅผ ์ด์šฉํ•˜์—ฌ API๋ฅผ ๋ชจํ‚นํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑ„๋„๋ก ์„ค๊ณ„๋œ Service Worker API๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชฉ ์‚ฌ์šฉ ์—ฌ๋ถ€ ๊ด€๊ณ„ ์—†์ด ๋™์ผํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™์ž‘์„ ๋ณด์žฅํ•œ๋‹ค. ๋˜ํ•œ, ๋ชจํ‚น์„ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํฐ ์žฅ์ ์ด๋‹คโ—๏ธ

image Next.js + TypeScript + MSW

์„œ๋ฒ„ API๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ธฐ ์ „์— ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ API ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค โœจ

โœ… ํด๋” ๋ฐ ํŒŒ์ผ ์„ค๋ช…

image

๐Ÿ“ mocks/data

๐Ÿ“ mocks/handlers

๐Ÿ“„ mocks/browsers.ts (๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ) or server.ts (๋…ธ๋“œ ํ™˜๊ฒฝ)

โœจ MSW ์‹คํ–‰ํ•˜๊ธฐ

_app.tsx์— ํ•˜๋‹จ์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ mocking์„ ํ™œ์„ฑํ™”ํ•œ๋‹ค.

if (process.env.NEXT_PUBLIC_API_MOCKING === 'enabled') {
  import('../mocks');
}

๐Ÿ‘‡ yarn dev ๋กœ ์‹คํ–‰ํ•˜๋ฉด Devtools > Console์— Mocking enabled๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค.

image

โœ… ์‚ฌ์šฉ๋ฒ•

ํ˜„์žฌ recoil, useSWR ์—ฐ๊ฒฐ์€ ์•ˆํ•œ ์ƒํƒœ...! ์ด๊ฑด ์‹ค์ œ API๊ฐ€ ๋‚˜์™€์•ผ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!!

๐Ÿ‘‡ ์‚ฌ์šฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค

 const handler = () => {
    fetch('/auth/login/naver/happhee')
      .then((res) => res.json())
      .then((res) => console.log(res));
  };

<Image
        src={ImgNaverLogo}
        width={56}
        height={56}
        style={{ padding: '1.5rem' }}
        onClick={() => handler()}
      />
image

๐Ÿ’š ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“ ์ง€ ์งˆ๋ฌธ ํ•ด์ฃผ์„ธ์š” ๐Ÿ’š