2. React Testing Library
1. React Testing Library
React Testing Library ๊นํ๋ธ React Testing Library ๊ณต์ ๋ฌธ์ jest-dom
๐ก React ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉ์ ์ ์ฅ์ ๊ฐ๊น๊ฒ ํ ์คํธํ ์ ์๋ ๋๊ตฌ UI ํ ์คํธ์ ํนํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ E2E Test์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ โ ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ์ฌ์ฉํ๋ฏ์ด ํ ์คํธ
๐ ๊ธฐ์กด์ ๋๊ตฌ
enzyme ์ฌ์ฉ์ ์ ์ฅ์์ ๋ณด๋ค๋ ํดํนํ๋ ๋๋์ผ๋ก ์ฌ์ฉํ๋๋ก ๋์ด ์์์ React Testing Library๋ ๊ตฌํ ์์ฒด๋ ํดํนํ๋ ๊ฒ์ฒ๋ผ ๋์ด ์์ง๋ง, ์ฌ์ฉ์ ์ ์ฅ์ ๊ฐ๊น๊ฒ ๋ง๋ค์ด์ง
๐ค React Testing Library๋? ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ๊ณณ์์๋ document๋ฅผ ์ธ ์ ์์ง๋ง, ๊ทธ๋ฐ ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํด์ค jest๋ node์์ ๋์๊ฐ๋๋ฐ React Testing Library๋ DOM ๊ด๋ จ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๊ณ , ๊ทธ ์์ react๋ฅผ ์น์ด์ ๋๋ฆฌ๋ฉด ํ ์คํธ ๊ฐ๋ฅ
์ฅ์
๋น ๋ฅด๊ฒ ์๋
ํ ์คํธ ์๋๋ฆฌ์ค ์์ฑ์ด ์ฌ์
render
๋ฅผ ์ด์ฉํ๋ฉด Main.tsx์ render์ ๋น์ทํ์ง๋ง ํจ์ฌ ์ฝ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ
2. given - when - then ํจํด
๋ชจ๋ BDD ์๋๋ฆฌ์ค์ ์๋ 3๊ฐ์ง ํต์ฌ ์์
GIVEN (context, ๋ฌธ๋งฅ ์ค๋ช )
WHEN (action, ๋์ ์ค๋ช ) : ~ ํ ๋์์ ํ๋ฉด
THEN (outcome, ๊ฒฐ๊ณผ ์ค๋ช ) : ~ ์ด๋ ๊ฒ ๋๋ค
์ผ์ด์ค๋ฅผ ๋๋ ์ฝ๋๋ฅผ ์ง๊ธฐ ๋๋ฌธ์ ํํ๋ ฅ์ด ์ข์์ง๊ณ , ๋ค์ํ ์ํฉ์ ๋ํด ๊ณ ๋ฏผํ ์ ์์
3. ํ
์คํธ ์ฝ๋ ์์ฑํ๊ธฐ
์ฃผ์์
๐ก UI๋ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๋ฅผ ํตํด ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ถ๋ฆฌํ๋ ๊ฒ์ ๊ถ์ฅ ๋ฒ์ฉ์ฑ์ด ์ปค์ง๊ณ ๋ค๋ฅธ ๊ณณ์์ ํฐ์ง๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฒ์๋ถํฐ UI๋ฅผ ๋๋๋ก ๊ฐ๋จํ๊ฒ ํ ๊ฒ
๊ณต์ฉ ๋ก์ง์ ์ด์ดํ๊ฒ ๋ง๋ค๊ธฐ
๋๋จธ์ง ๋ถ๋ถ์ ๋ชจ๋์ ๋ชจํนํ๊ฑฐ๋ ๋ฐฑ์๋ ๋ถ๋ถ์ MSW๋ฅผ ์ฌ์ฉํด ์ฒ๋ฆฌํ๊ธฐ
์ปดํฌ๋ํธ์ ์ธํฐํ์ด์ค ์ ๊ฒ
ํ ์คํธ ์ฝ๋(์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋)๋ฅผ ์์ฑํ๋ฉด์ ํด๋น ์ปดํฌ๋ํธ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ฒ ๊ฐ๋ฅ
๊ธฐ์กด์ ๋ฌธ์
label์ด ๋น ์ ธ์๋ ๋ฌธ์
text ๊ฐ์ด ๋ฒ์ฉ์ ์ธ ํํ์ ์ฌ์ฉํ์ง ์์ ๋ฌธ์
ํ ์คํธ๋ถํฐ ์์ฑํ๊ฑฐ๋ ๋น ๋ฅด๊ฒ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ฉด, ์์ฑํ๊ธฐ ์ ๋๋ ์งํ์ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํด์ ์์ ํ ์ ์์์ ๊ฒ โ ๏ธ ์๊ฐ์ด ์ง๋๋ฉด ํด๋น ์ฝ๋์ ๋ํ ์ง์์ด ๊ฐ์ํ๊ณ , ์์ ๊ฐ๋ ๊ฐ์ํ๊ธฐ ๋๋ฌธ์ ๊ฑด๋๋ฆฌ๊ธฐ ํ๋ ์ฝ๋๊ฐ ๋๋ ์ฃผ์
BDD ์คํ์ผ๋ก ์ฝ๋ ์์ , ์
๋ ฅ ๊ธฐ๋ฅ ํ
์คํธ
BDD ์คํ์ผ๋ก ์ฝ๋๋ฅผ ๋ฐ๊พธ๊ณ , ์ ๋ ฅ ๋ฑ์ด ์ ์๋ํ๋์ง ํ์ธ
1. context ๋ถ๋ฆฌ
2. render ํจ์ ์์ฑ, ๋ชจํน ํจ์ ์ด๊ธฐํ ์ฒ๋ฆฌ
describe-context๋ก ๋๋ ์ค์๋ก ์์ํ๊ฒ ์งํ๋จ
๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ Extract Function
fireEvent ๋ฑ์ ํตํด ์ธํฐ๋์ ๋ง ๊ฒ์ฆ
๋ง์ฝ ๋ณต์กํ ๋ก์ง์ด ์ปดํฌ๋ํธ๋ก๋ถํฐ ๋ถ๋ฆฌ๋๋ค๋ฉด, ์ฌ๊ธฐ์๋ ์ด๊ฒ๋ง ๊ฒ์ฆํ๋ฉด ๋จ
Ex. setText์ ์ซ์๋ง ์ ๋ ฅ๋ฐ๊ฒ ํ๊ณ ์ถ๋ค๋ฉด, ์ปดํฌ๋ํธ์์ ๊ทธ๋ฐ ๋ก์ง์ ๊ตฌํํ๋ ๊ฒ์ด ์๋๋ผ ํ ์คํธ ํ ๋ ๊ทธ๋ ๊ฒ ๋์ํ๋๋ก ์์ฑํ๋ฉด ๋จ
๐ก ์ปดํฌ๋ํธ์ ์ฑ ์์ด ์๋๊ฒ ๋จ
API ์์ฒญ ์ฝ๋ ๋ชจํน
์ธ๋ถ ์์กด์ฑ์ด ํฐ ์ฝ๋(API ์์ฒญ ๋ฑ)๋ฅผ ์์ฑํ ๊ฒฝ์ฐ, ํด๋น ๋ถ๋ถ๋ง ๊ฐ์ง๋ก ๊ตฌํ
๋งค๋ฒ ์๋ฒ๋ฅผ ๋์ฐ๊ธฐ ์ด๋ ต๊ณ , ์ค์๋ฒ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ํ ์คํธ์์๋ง ๊ฐ์ง๋ก ์๋ฒ๋ฅผ ๊ตฌํ ํ๋ก ํธ์๋๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฐฑ์๋์ ์ํตํ๋ ๋น์ค์ด ํผ ๐ก ์ด ๋ถ๋ถ์ ํ๋์ฉ ๊ฐ์ง ๊ตฌํ์ผ๋ก ๋ฐ๊พธ๋ค ๋ณด๋ฉด ์ด๋ ค์ด ๊ฒฝ์ฐ๊ฐ ๋ฐ์ โ MSW ๋ฑ ๋ค๋ฅธ ๋์์ ๊ณ ๋ ค
4. Mocking
๊ฐ์ง๋ก ์ ๋ ๊ฒ
ํ
์คํธ๋ฅผ ์ํํ ๋ชจ๋
๊ณผ ์ฐ๊ฒฐ๋๋ ์ธ๋ถ์ ๋ค๋ฅธ ์๋น์ค๋ ๋ชจ๋
์
์ค์ ์ฌ์ฉํ๋ ๋ชจ๋
์ ์ฌ์ฉํ์ง ์๊ณ ์ค์ ์ ๋ชจ๋์ ํ๋ด๋ด๋ ๊ฐ์ง ๋ชจ๋์ ์์ฑ โ ํ
์คํธ์ ํจ์ฉ์ฑ์ ๋์
์๋ํ๋ ํ
์คํธ๋ฅผ ์ํํ๊ธฐ ์ด๋ ค์ธ ๋ ์ฃผ๋ก ์ฌ์ฉ
๐ TDD์์ ๊ด๊ณ
ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ(TDD)์์๋ ์๋ํ๋ ํ ์คํธ๊ฐ ํ์์ ์ธ ์์ ์ค์ ํ๋ ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ๋ฉด ์๋น ๋ถ๋ถ์ ํ ์คํธ๋ฅผ ์ฌ์ฉ์์ ๊ฐ์ ์์ด ์๋ํ ํ ์ ์์
์ฌ์ฉ ์์
์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI) ํ ์คํธ : ์ฌ์ฉ์์ ๋ฐ์์ด ํ์ํ ํ ์คํธ๋ฅผ ์ํํ ๊ฒฝ์ฐ, ์ฌ์ฉ์๊ฐ ํ ์คํธ์ ์ฐธ์ฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์๋ํ๋ ํ ์คํธ ์ํ์ด ์ด๋ ค์. ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์ด์ฉํด ์ฌ์ฉ์์ ์๋ต์ ํ๋ด๋ด์ด ์ฌ์ฉ์์ ๊ฐ์ ์์ด๋ ํ ์คํธ๋ฅผ ์ํ
๋ฐ์ดํฐ๋ฒ ์ด์ค(DB) ํ ์คํธ : ์๋ฃ์ ๋ณ๊ฒฝ์ ์๋ฐํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์์ ์ ํ ์คํธ ํ๋ ๊ฒฝ์ฐ, ํ ์คํธ ์ํ ํ ๋งค๋ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ฃ๋ฅผ ์๋๋๋ก ๋๋ ค๋์ผ ํ๋๋ฐ, ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ต์ ํ๋ด๋ด์ด ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ ์์ด ํ ์คํธ๊ฐ ๊ฐ๋ฅ
5. Test fixture
์ํํธ์จ์ด๋ฅผ ์ผ๊ด๋๊ฒ ํ ์คํธํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํ๊ฒฝ ํ ๊ณณ์ ๋ชฐ์์ ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํจ
์ฅ์
๊ฐ ํ ์คํธ๊ฐ ํญ์ ๋์ผํ ์ค์ ์ผ๋ก ์์ํ๊ธฐ ๋๋ฌธ์ ํ ์คํธ๋ฅผ ๋ฐ๋ณตํ ์ ์์
๋ฉ์๋๋ฅผ ๋ค๋ฅธ ํจ์๋ก ๋ถ๋ฆฌํ๊ณ ๊ฐ ๊ธฐ๋ฅ์ ๋ค๋ฅธ ํ ์คํธ์ ์ฌ์ฌ์ฉํ ์ ์์
ํ ์คํธ ์ฝ๋ ์ค๊ณ๊ฐ ์ฉ์ดํจ
์ด์ ํ ์คํธ ์คํ์์ ๋จ์ ํญ๋ชฉ์ผ๋ก ์์ ํ๋ ๋์ , ์๋ ค์ง ์ด๊ธฐ ์ํ๋ก ํ ์คํธ๋ฅผ ๋ฏธ๋ฆฌ ๊ตฌ์ฑ
ํด๋ ๊ตฌ์กฐ
1. ์ง์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
2. mocks ํด๋๋ฅผ ๋ถ๋ฆฌํ ๊ฒฝ์ฐ
๋ณต์กํด์ง๋ฉด ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉ
Last updated