MSW
MSW(Mock Service Worker)
์ ํ๋ฆฌ์ผ์ด์ ์์ ์๋ฒ API ํธ์ถ์ Mocking(๊ฐ์ง๋ก ๊ตฌํ)ํ ๋ ์ฌ์ฉ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์คํ๋ผ์ธ ์์ ๋ฑ์ ์ง์ํ๊ธฐ ์ํ ์๋น์ค ์์ปค์ ๊ธฐ๋ฅ์ ์ ์ฉํ ํ์ฉํ ๊ฒ
์๋ฒ ์๋ต์ ๊ฐ์ง ๋ฐ์ดํฐ๋ก ๋์ฒดํ์ฌ ์๋ฒ ์์กด์ฑ ์์ด ์ฝ๋๋ฅผ ํ ์คํธํ๊ฑฐ๋ ๊ฐ๋ฐํ ์ ์๋ค.
Service Worker
๋ธ๋ผ์ฐ์ ์์ ๋ฉ์ธ ์ค๋ ๋์ ๋ณ๋๋ก ์คํ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ
์ผ๋ฐ์ ์ผ๋ก ๋คํธ์ํฌ ํ๋ก์ ๊ฐ์ ์ญํ ์ด๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ , ์บ์ฑ, ์คํ๋ผ์ธ์ ์ฒ๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ค.
Worker
์น ๋ธ๋ผ์ฐ์์ ๋์ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ ๋ธ๋ผ์ฐ์ ์ ๋ฉ์ธ์ค๋ ๋์์ ์คํ๋๋ค.
์น์์ ์ ๊ณตํ๋ Worker๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ณ๋์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ๊ฐ๋ก๋ง์ง ์๊ณ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์๋ค.
๋ฉ์ธ ์ค๋ ๋๋ฅผ non-blocking
ํ๊ธฐ ๋๋ฌธ์ ๋น์ผ ์ฐ์ฐ์ worker ์์ ์คํํ๋ฉด ์ฌ์ฉ์ ๊ฒฝํ์ด ์ข์์ง๋ค.
Window
์ Document
์ ์ ๊ทผํ ์ ์๋ค.
ํ๋ก์(Proxy)๋?
ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์์ ์ค๊ณ ์ญํ ์ ์ํํ๋ ์๋ฒ
๋คํธ์ํฌ ํ๋ก์๋ ๋คํธ์ํฌ ํ๊ฒฝ์์ ์ธํฐ๋ท ์ ์์ ์ ์ดํ๊ณ ์ค๊ณ ์ญํ ์ ํ๋ ์๋ฒ๋ฅผ ์๋ฏธํ๋ค.
Service Worker๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ
๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๋ ๋ ๋ฆฝ์ ์ธ ์ค๋ ๋
๋คํธ์ํฌ ์์ฒญ ๊ฐ๋ก์ฑ๊ธฐ (ํ๋ก์ ์ญํ )
์บ์ ์ ์ฅ์ ์ ์ด
ํธ์ ์๋ฆผ ์ ๊ณต
๋ฐฑ๊ทธ๋ผ์ด๋ ๋๊ธฐํ ์์ ์ํ
์คํ๋ผ์ธ ์ํฉ์์๋ ์๋ ๊ฐ๋ฅํ ์คํ๋ผ์ธ ๊ธฐ๋ฅ ์ ๊ณต
MSW ํ๊ฒฝ ์ธํ
ํ๊ธฐ
src/mocks/
server.ts
mock server๋ฅผ ๊ตฌ์ฑํ ํ์ผ
handler.ts
์ฌ์ฉํ api ์คํ์ ์์ฑํ๋ ๊ณณ
๊ฐ๋จํ๊ฒ ํ ์คํธ ๋ฐ ๋ชฉ ๋ฐ์ดํฐ๋ก์ ์ฌ์ฉํ ์ ๋๋ก๋ง ๊ฐ๋ฐํ์. ๋๋ฌด ์น์คํ๋ฉด ๋ฐฑ์๋๋ฅผ ๊ฐ๋ฐํ๋ ๊ฒ์ด๋ ๋งค๋ชฐ๋์ง๋ง์
MSW with Jest
src/setupTests.ts
jest.config.js
ํ์ผ์ setupFilesAfterEnv
์์ฑ์ setupTests.ts
ํ์ผ ์ถ๊ฐ
Testing with MSW
MSW๋ก ์๋ฒ API ์์กด์ฑ์ ๋์ฒดํ์ฌ ํ ์คํ ์ด ๊ฐ๋ฅํ๋ค. Jest๊ฐ ์ ๊ณตํ๋ mock ์์จ๋ ๋จ
ReferenceError: fetch is not defined
์ฌ์ฉ ์ค์ธ Node์ ๋ฒ์ ์ด ๋ฎ์ ๊ฒฝ์ฐ, fetch API๋ฅผ ์ง์ํ์ง ์์์ msw๋ฅผ ์ฌ์ฉํ ๋ ReferenceError: fetch is not defined
์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์ด ๊ฒฝ์ฐ์ polyfill(ํด๋ฆฌํ)์ ์ฌ์ฉํด์ ํด๊ฒฐํด์ผ ํ๋ค.
ํด๋น ํด๋ฆฌํ์ ์ฌ์ฉํ๋ ๊ณณ์์ import 'whatwg-fetch'
๋ฅผ ๋ช
์ํด์ฃผ์ด์ผ ํ๋ค.
msw๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ๊ณณ์์ ํ์ํ๊ธฐ ๋๋ฌธ์ setupTests.ts
์ ๋ช
์ํด์ฃผ์
polyfill(ํด๋ฆฌํ)
์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ์ ์ ๊ตฌํ ๋ธ๋ผ์ฐ์ & ๋ ธ๋ ํ๊ฒฝ์์๋ ์ง์ํ ์ ์๋๋ก ๋์์ฃผ๋ ์ฝ๋์กฐ๊ฐ์ด๋ค.
ํน์ ํ๊ฒฝ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ์ง์ํ์ง ์์ ๋ ์ฌ์ฉ๋๋ค.
๊ฐ์ฅ ๋ํ์ ์ผ๋ก ES6์ ์ถ๊ฐ๋ Promise
๋ ie11 ๊ฐ์ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์ ์ง์ํ์ง ์์ ํด๋ฆฌํ์ ์ฌ์ฉํด์ผ ํ๋ค.
Last updated