React Testing Pattern
์ค์ ๊ณผ ํด์ง๋ฅผ ํตํ ํ๊ฒฝ์ ๊ฒฉ๋ฆฌ
์ ๋ํ ์คํธ๋ฅผ ์ํํ ๋ ๊ฐ ํ ์คํธ๋ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋์ด์ผ ํ๊ณ ์ธ๋ถ ํ๊ฒฝ์ ์ํฅ์ ๋ฐ์ง ์๊ณ ํญ์ ๋์ผํ ํ๊ฒฝ์์ ์์ํ ๋ชจ๋์ ๋์๋ง์ ๊ฒ์ฆํด์ผ ํ๋ค.
์ค์ (Setup)
ํ ์คํธ๊ฐ ์์๋๊ธฐ ์ ์ ์ํ๋๋ฉฐ ๋์ผํ ํ๊ฒฝ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ณ์ ์ค์ ๋ฐ mock์ ์ฃผ์ ํ๋ค.
jest์์ ์ ๊ณตํ๋
beforeEach
beforeAll
๋ฑ์ ํจ์๋ค์ ์ฌ์ฉํด์ ๋ฏธ๋ฆฌ ์ค์ ํ๊ณ ์ ํ๋ ๊ฐ๋ค์ ์ ์ํ๊ฑฐ๋ ๋ชจํนํ๋ค.beforeAll() โ ๋์ผํ ์ค์ฝํ ๋ด(์์ํฌํจ) ํ ์คํธ๋ค์ด ์์๋๊ธฐ ์ ๊ฐ์ฅ ๋จผ์ ํ๋ฒ ์ํ
beforeEach() โ ๋์ผ ์ค์ฝํ ๋ด(์์ํฌํจ) ๊ฐ๊ฐ์ ํ ์คํธ ํจ์๊ฐ ์คํ๋๊ธฐ ์ด์ ์ ์ํ
ํด์ง(Teardown)
ํ ์คํธ์ ์ข ๋ฃ ํ ๋ง๋ฌด๋ฆฌ, ์ดํ ํ ์คํธ์ ์ํฅ์ด ์๋๋ก ์ธํ
AfterEach() โ ๋์ผ ์ค์ฝํ ๋ด(์์ํฌํจ) ๊ฐ๊ฐ์ ํ ์คํธ ํจ์๊ฐ ์ข ๋ฃ๋ ์ดํ ์ํ
AfterAll() โ ๋์ผํ ์ค์ฝํ ๋ด(์์ํฌํจ) ํ ์คํธ๋ค์ด ๋ชจ๋ ์ํ๋ ํ ๋ง์ง๋ง์ ํ๋ฒ ์ํ
parent Scope ๋จผ์ ์ํ๋๊ณ ๊ทธ ๋ค์ child Scope๊ฐ ๋์ค์ ์ํ๋๋ค.
React Testing Library ํจ์ ๋ด๋ถ์์ ์ด๋ฏธ ์ค์ /ํด์ง๋ฅผ ์งํํ๊ณ ์์ด ์ผ๋ฐ์ ์ผ๋ก ๋ณ๋์ ์ค์ ์ ์ฒ๋ฆฌํ์ง ์์๋ ๋์ง๋ง ํ ์คํธ์ ๋ ๋ฆฝ์ ์ํ ๋ณด์ฅ์ ์ํ ๊ฐ๋ ์ ์ดํดํด์ผ ํ๊ณ ๋ณ๋๋ก ์ค์ /ํด์ง๊ฐ ํ์ํ ์ฝ๋๊ฐ ์กด์ฌ
Timer๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
setTimeout, setInterval, clearTimeout, clearInterval
Timer๋ฅผ ์ฌ์ฉํ์ฌ ๋ช์ด ๋ค์ ์ด๋ฒคํธ๋ฅผ ์คํํ๋ ๋ฑ์ ์ฝ๋๋ค์ ํ ์คํธ๊ฐ Timer๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ฉฐ ์ด๋ก ์ธํด ํ ์คํธ๋ ๋๋ ค์ง๊ณ ์์ธก ๋ถ๊ฐ๋ฅํด์ง๋ค.
์ด๋ฐ ๊ฒฝ์ฐ jest์์ ์ ๊ณตํ๋
fake timer
๋ฅผ ์ฌ์ฉํ๋๊ฒ์ด ์ข๋ค.
์ธํฐ๋ ์
๋จ์์ ๊ฒ์ฆ
AAA ํจํด (Arrange, Act, Assert)
ํ ์คํธ ์ฝ๋๋ 3๋จ๊ณ๋ก ๋๋์ด ํด๋น ํ ์คํธ๊ฐ ๋ฌด์์ ํ๊ณ ์ด๋ค ๋ชฉ์ ์ ๊ฐ๋์ง ๋ณด๋ค ๋ช ํํ๊ฒ ์ดํดํ ์ ์๋๋ก ๊ตฌ์ฑ
Arrange (์ค๋น)
ํ ์คํธ ์คํ ์ค ํ์ํ ๊ฒ๋ค์ ์ค๋น
BeforeEach
,afterEach
Render Components
Mocking, State, Service ๋ฑ
Act (์คํ)
ํ ์คํธ ์ฝ๋ ์คํ
User์ Action (Click, State change ๋ฑ)
RTL์ act() wrapping ๋ถํ์
Assert (๋จ์ธ)
์คํํ ์ฝ๋ ๊ฒฐ๊ณผ์ ๋์์ ๊ฒ์ฆ
Text, State, Child count ๋ฑ
๋ณต์กํ ์ปดํฌ๋ํธ๋ผ๋ฉด
์ปดํฌ๋ํธ๊ฐ ๋ณต์กํ๋ค๋ฉด ์ธํฐ๋ ์ ๋จ์ ๊ฒ์ฆ์์ ์ปดํฌ๋ํธ์ ๋ชฉ์ ๊ณผ ๋์์ ๋ง์ถ์ด ํ ์คํธ๋ฅผ ์ปดํฌ๋ํธ๋ณ ๋์๋ณ๋ก ๋ถ๋ฆฌํด์ ์งํ
Ex) List - Item ๊ด๊ณ (Container - Child)
List ์ปดํฌ๋ํธ โ list ์กฐ๊ฑด์ ๋ฐ๋ผ list count๊ฐ ์๋๋์ง ํ์
Item ์ปดํฌ๋ํธ โ child component๋ค์ property, value ๊ฐ์ ๊ฐ์ง๊ณ ์ฌ๋ฐ๋ฅด๊ฒ render ๋๋์ง
๋ ๋๋ง ๊ฒ์ฆ
Component๋ฅผ Renderํ๊ณ document.body์ ๋ถ์ธ๋ค.
๋ฐํ๊ฐ
query objects โ render ๋ DOM์์ ํน์ element๋ฅผ ์กฐํํ ๋ ์ฌ์ฉ ===
screen
์ฌ์ฉcontainer โ React ์ปดํฌ๋ํธ๊ฐ render ๋ DOM node, div
baseElement โ container๊ฐ ๋ค์ด์๋ DOM node, default - body
rerender โ props๋ฅผ ๋ณ๊ฒฝํ์ฌ component update ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ
unmount โ ๋ฉ๋ชจ๋ฆฌ ์ ์๋ฅผ ์ ๋ฐํ๋ event handler๋ฅผ ๋จ๊ฒจ๋๋ ํ ์คํธ ์๋ ์ ์ ์ฉ, ๋๋ ์ปดํฌ๋ํธ๊ฐ unmount ๋๋ ์์ ์ ํ ์คํธํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
RenderHook
ํจ์ํ ์ปดํฌ๋ํธ์์ ์ฌ์ฉ๋๋ Hook์ ํ ์คํธํ๋ ํจ์
React v18 ๋ถํฐ RTL/react์ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจ๋์ด์ง
renderHook ํจ์ ์์ ์ฝ๋ฐฑ์ผ๋ก hook์ ๋ฃ๊ณ ํ ์คํธ
return object์ reulst ์์ฑ์ ํตํด ํ ์ ๋ฐํ๊ฐ์ ํ์ธํ ์ ์๋ค.
result.current
โ ์ฝ๋ฐฑํจ์๊ฐ ๋ง์ง๋ง์ผ๋ก ๋ฆฌํดํ ๊ฐcurrent
โ ์ปค์คํ ํ ์ ์ฌ๋ฌ๋ฒ ํธ์ถ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง ์คํ๊ฐ์ธ current๋ฅผ ์ฐธ์กฐ
Context API ๊ฒ์ฆ
custom hook์ด context API ๋๋ redux์ dispatch๊ฐ์ context๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
renderHook์ ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก contextProvider Wrapper๋ฅผ ์ ๊ณต
Asyc ๊ฒ์ฆ
custom hook์ด async ๋์์ ์ํํ ๋
Last updated