1. ํ๋ก์ ํธ ์์ฑ๋จผ์ ๊ตฌ๊ธ ๊ณ์ ์ผ๋ก Firebase Console์ ๊ฐ์
ํ๊ณ , ํ๋ก์ ํธ๋ฅผ ๋ง๋ ๋ค. ๋ฐฐํฌ ๊ธฐ๋ก์ด๋ Firebase๊ฐ ์ ๊ณตํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฝ์์์ ๋์ฌ๋ณด๋์ฒ๋ผ ๋ณด๋ฉด์ ๊ด๋ฆฌํ ์ ์๋ค. ๋ด ํ๋ก์ ํธ๊ฐ ์ค๋ฅธ์ชฝ์ ์์ฑ๋ ๋ชจ์ต 2. Firebase CLI ์ค์น npm์ผ๋ก Firebase CLI ์ค์น npm install -g firebase-tools 3. ํ๋ก์ ํธ ์ด๊ธฐํ ๋ฐฐํฌํ๋ ค๋ ํ๋ก ํธ์๋ ํ๋ก์ ํธ์ ๋ฃจํธ์์ ํ๋ก์ ํธ๋ฅผ ์ด๊ธฐํํ๊ธฐ firebase init hosting ์ด๊ธฐํ ๋ช
๋ น์ ์คํํ๋ฉด, interactive ์ง๋ฌธ์ด ์ญ ๋์จ๋ค. Project setup? Please select an option:๊ธฐ์กด ๋ก์ปฌ ํ๋ก์ ํธ์๋ค Firebase ํ๋ก์ ํธ๋ก ์ฐ๊ฒฐํ๋ ๊ฒ์ด๋, Use an exist..
React
ํ์npm run dev๋ก ๊ฐ๋ฐํ๊ฒฝ ์คํํ๊ณ ๋ธ๋ผ์ฐ์ ์คํ์ ์๋ฌด๋ฐ ํ๋ฉด์ด ๋์ค์ง์๊ณ ๋ก๊ทธ์๋ ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ์ฐํ๋ ํ์ Uncaught SyntaxError: The requested module '/node_modules/.vite/deps/msw.js?v=3f957acc' does not provide an export named 'rest' ์์ธvite์ ์บ์ํ์ผ์ด ์ต์ ํ๊ฐ ๋์ง ์์ ๋ํ๋๋ ๋ฌธ์ ํ๋ก์ ํธ package.json์์ ๊ด๋ฆฌํ๊ณ ์๋ dependency ์์กด์ฑ์ด ์บ์๋์ด์๋ ์์กด์ฑ์ด๋ ๋ค๋ฅผ ๋ ๋ฐ์ ํด๊ฒฐnode_modules ๋ด๋ถ์ ์๋ vite ์บ์ํ์ผ์ธ `.vite ํด๋` ์ญ์ ์ดํ ๋ค์ npm run dev ์ฌ์คํ ์ด๋๋ ๋์ง์๋๋ค๋ฉด..? `node_modules` ๋ด..
๋ฌธ์ 2๊ฐ์ง ์ธํ์ด ์๋ค. "๋น๋ฐ๋ฒํธ"๋ฅผ ๋ผ๋ฒจ๋ก ๊ฐ์ง๋ ์ธํ 1๊ฐ์ "๋น๋ฐ๋ฒํธ ํ์ธ"์ ๋ผ๋ฒจ๋ก ๊ฐ์ง๋ ์ธํ 1๊ฐ ํ
์คํธ๋ฅผ ๋๋ฆฌ๋๋ฐ ์ด์ํ๊ฒ "๋น๋ฐ๋ฒํธ ํ์ธ" ์ธํ์ ์
๋ ฅ๋์ด์ผํ๋ ๊ฐ์ด ๊ณ์ ์์ "๋น๋ฐ๋ฒํธ" ์ธํ์ ์
๋ ฅ๋๋ ํ์์ด ์์๋ค.๋๋ฒ๊น
ํ๊ธฐ ๋๋ฌด ์ด๋ ค์ ๋๊ฒ์, ํ
์คํธ์์ ์๋ฌ๋๋ ๋ถ๋ถ์ ๋น๋ฐ๋ฒํธ ํ์ธ ์ธํ DOM ์์๋ฅผ ์ฐพ์ง ๋ชปํด์๋ ์๋์๋ค. ๋น๋ฐ๋ฒํธ ํ์ธ ์ธํ์ ์ฐพ์์ง๋๋ฐ, ๊ทธ๊ฒ ์ ๋๋ก๋ ์๋ ๋น๋ฐ๋ฒํธ ํ์ธ ์ธํ์ด ์๋ ์์ ๋น๋ฐ๋ฒํธ ์ธํ์ผ๋ก ์ฐพ์์ง๋ ๋ฌธ์ ์๋ค. ๋๋์ฒด ์์ด๋ด๊น.. ํ๋ค๊ฐ Testing Playground์์ ์๋ํด๋ณด๋ค๊ฐ ๋๋์ด ์์ธ์ ์ฐพ์๋ค. ์์ธ์ปดํฌ๋ํธ๋น๋ฐ๋ฒํธ๋น๋ฐ๋ฒํธ ํ์ธ ํ
์คํธ์ฝ๋screen.getByLabelText('๋น๋ฐ๋ฒํธ') input์ id๊ฐ ๊ฐ์ ๊ฒฝ์ฐ, id๊ฐ ..
๋ฌธ์ POST/PATCH Mutation ์์ฒญ์ ์บ์ฑ์ ๋ฌดํจํํ์ฌ ๋ฐ์ดํฐ์ ์ต์ ์ํ๋ฅผ ์ ์งํ๋๋ก ์ ์ฉํด๋์๋ค.์ด๋ฏธ์ง ๋ฑ๋ก POST > ์ด๋ฏธ์ง ๋ชฉ๋ก GET > ์ธ๋ค์ผ ์ด๋ฏธ์ง PATCH > ์ ์ฒด ์ด๋ฏธ์ง๋ชฉ๋ก GET ์์๋ก ํธ์ถ๋์ด ๊ฐฑ์ ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋๋ก ์์ํ์ผ๋, PATCH Mutation ์์ฒญ ์ดํ์ GET ์ฟผ๋ฆฌ๊ฐ ์คํ๋์ง ์์์, ์ธ๋ค์ผ์ด๋ฏธ์ง๊ฐ ํ๋ฉด์ ๋ฐ๋ก ๋ฐ์๋์ง ์๋ ๋ฌธ์ ๊ฐ ์์๋ค. Expected Behavior POST > GET > PATCH > GET Current BehaviorPOST > GET > PATCH (๋ธ๋ผ์ฐ์ ๋คํธ์ํฌ) POST > PATCH > GET (์ฝ์) ์ปดํฌ๋ํธ ์ฝ๋//ImageContainer.tsx์๋ฒ์ ์์ฒญ ๋ณด๋ด๋ ์ฝ๋ ์กด์ฌ ์ธ๋ค์ผ ์ค์ ํ๋ ํจ์ const ..
์ด์authoriztion token์ ๋ณด๋ก api์ ์์ฒญ์ ๋ฐ์์ ํ๋ฉด์ ์ ์ ์ ๋ณด๋ฅผ ๋์ฐ๋ ๋ง์ด ํ์ด์ง๊ฐ ์๋ค.ํ
์คํธ๋ฅผ ๋๋ฆฌ๋๋ฐ ํ
์คํธ ํ๊ฒฝ์์ ์๊พธ ์ ์ ์ ๋ณด๊ฐ ๋น๊ฐ์ผ๋ก ๋์ค๋ ์ด์๊ฐ ์์๋ค. ์ปดํฌ๋ํธ ๊ตฌํ ์ ์ ์ ๋ณด๋ฅผ get ํด์ค๋ ค๋ฉด ์ ์ฅ๋ ํ ํฐ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ฒ์ ์์ฒญํด์ response๋ก ๋ฐ์์์ผํ๋ค.์ด๋, ์ธ์ฆ ํ ํฐ์ ๋ก์ปฌ์คํ ๋ฆฌ์ง์์ ํ ํฐ ์ ๋ณด๋ฅผ ๋ฐ์์ค๋๋ฐ, ๋ก์ปฌ ์คํ ๋ฆฌ์ง์์ ํ ํฐ์ ๋ณด๋ฅผ ๋ฐ์์ฌ๋ localStorage Web API๋ฅผ ์ฌ์ฉํด์ localStorage.getItem("token")๋ก ๋ฐ๋ก ๋ฐ์์ค๋ ๊ฒ์ด ์๋๊ณ , store๋ผ๋ 3rd party ํจํค์ง๋ฅผ ํตํด ์คํ ๋ฆฌ์ง์ ์ ๊ทผํ๋ค. //package.json "dependencies": { "store": "2.0.12" }, ๋ฐ..
์์กด์ฑ ํจํค์ง "devDependencies": { "jest": "29.3.1", "react": "18.2.0", ... } ๋ฌธ์ test ํ๊ฒฝ์์ png ์ด๋ฏธ์ง ํ์ผ์ ๋ชป์ฝ์ด์ค๋ ์๋ฌ๊ฐ ๋ฐ์ error: `process()` or/and `processAsync()` method of code transformer found at fileTranformer.cjs "/fileTransformer.cjs" should return an object or a Promise resolving to an object. ์์ธjest๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฝ๋๋ฅผ JavaScript๋ก ์คํํ๋ค. Node๊ฐ ์ง์ํ์ง ์๋ syntax์ธ JSX, TypeScript ๊ฐ์ ์ฝ๋๋ฅผ ๊ณง๋ฐ๋ก ์ฌ์ฉํ๋ ค๋ฉด pla..
๋ค์ด๊ฐ๊ธฐํ๊ฒฝnode 20.16 ํจํค์ง ์์กด์ฑreact testing library 13.4.0redux toolkit 1.9.5 msw 2.3 vite 5.2.11typescript 4.9.4jest 29.3.1 msw ํธ๋ค๋ฌ๋ก ์๋ฒ ์๋ต ๋ชจํน, RTK Query๋ก API ํธ์ถํ๋ ์ปดํฌ๋ํธ์์ ๋ฐ์ํ๋ ์๋ฌ ๋ชจ์zip... ํ
์คํธ๋ก ์ฝ๋ ํ์ง์ ํฅ์์ํค๊ณ ์ ํ์ผ๋ jest testing framework + msw 2 ํ๊ฒฝ์์ ์
ํ
ํ๋ค๊ฐ ์ ์ ๊ฑด๊ฐ์ ์ํ์ ๋ฐ์๋คmsw ์์๋ ์๊ธด๊ฒ ์ด๋ ๊ฒ ์
ํ
ํ๋๊ฒ ๊ท์ฐฎ์ผ๋ฉด ~ ๋ ๋ชจ๋ํ ํ
์คํ
ํ๋ ์์ํฌ ์ฌ์ฉํ๋ ด~ ์ด๋ผ๊ณ ๊ถ์ฅ..If you find this setup cumbersome, consider migrating to a modern testing fra..
ํ
์คํธ ๋ด์ฉ ํ
์คํธ ํ๊ฒฝ jest | React Testing Library React Router์ useNavigate๋ก ์ฐ๊ฒฐ๋์ด์๋ ํ์ด์ง๊ฐ ์๋ค. ํ์ธ ๋ฒํผ์ ๋๋ฅด๋ฉด ์กฐ๊ฑด์ ์ถฉ์กฑํ๋์ง ๊ฒ์ฌ ํ ๋ค์ ํ์ด์ง๋ก ์ด๋ํ๋ ํ์ด์ง์ด๋ค. ์ด๋ฅผ ์๋์ ๊ฐ์ด ํ
์คํธํด์ผ ํ๋ค. ์ฝ๊ด๋์ ํ์ด์ง์์ ์ ์ฒด ๋์ ์ฒดํฌ ํ ํ์ธ๋ฒํผ์ ๋๋ฅด๋ฉด, ๋ค์ ํ์ด์ง์ธ ์ด๋ฆ ์
๋ ฅํ์ด์ง๋ก ์ด๋ํ๋ค. ํ
์คํธํ๋ ค๋ ์ฝ๋ Agreement.tsxexport const Agreement = () => { const navigate = useNavigate(); const [checked, setChecked] = useState(false); const handleClick = () => { if (checked) { navigate('/..
๊ธฐ์กด ์
์
api ์์ฒญ์ stage ์๋ฒ์ url์ธ `VITE_ACCOUNTS_BASE_URL` ํ๊ฒฝ๋ณ์๋ก ์ง์ ํ ์ฃผ์๋ก ์์ฒญ์ ๋ณด๋ด์ ์คํ
์ด์ง ์๋ฒ ์์ฒญ/์๋ต์ ์ง์ ๋ฐ๋๋ค. ์๋ฒ์์ ์๋ต์ผ๋ก ์ฃผ๋ ํ์ด์ง ์ฃผ์๋ redirect ํ์ด์ง url ์ ๋ณด๋ `VITE_LOCAL_HOST` ๋ผ๋ ํ๊ฒฝ๋ณ์ ์ฃผ์๋ก ๊ด๋ฆฌํด์ ๊ฐ๋ฐํ๋ฉด์ ๋ฐ๋ก๋ฐ๋ก ์๋ฒ ์๋ต์ ๋ฐ๋ฅธ ํ์ด์ง ui ๋ฅผ ํ์ธํ๋ค. package.json "scripts": { "dev": "vite", "build": "vite build -m stage", "stage": "vite -m stage", } ํ๊ฒฝ๋ณ์ ํ์ผ๊ฐ๋ฐ ๋ชจ๋ ํ๊ฒฝ๋ณ์ ์คํ
์ด์ง ๋ชจ๋ ํ๊ฒฝ๋ณ์ vite ๊ฐ๋ฐ์๋ฒ ์์`npm run dev` ๋ช
๋ ์ด๋ก ๋ก์ปฌ์์ vite ๊ฐ..
This post is what I took notes from the React Testing for Beginners By Programming with Mosh.What to testTesting ComponentsHow they renderHow they responsd to user actions No tests > Bad testsBad tests are worse than No tests.Poorly written tests can get in the way and slow us down. Test the behaviour (What the application does), not the implementation (How it's implemented) Integration Tests ..