2. React Testing Library
React Testing Library
๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉ์ ์ ์ฅ์ ๊ฐ๊น๊ฒ ํ ์คํธ ํ ์ ์๋ ๋๊ตฌ
Implementation Driven Test(๊ตฌํ ์ฃผ๋ ํ ์คํธ) : ์ฃผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง์ ๋ํด ์ด์ ์ ๋์ด ํ ์คํธ ์์ฑ
Behavior Driven Test(ํ์ ์ฃผ๋ ํ ์คํธ) : ์ฌ์ฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์ฉํ๋ ๊ด์ ์์ ์ฌ์ฉ์์ ์ค์ ๊ฒฝํ ์์ฃผ๋ก ํ ์คํธ๋ฅผ ์์ฑ
React Testing Library๋ Behavior Driven Test ๋ฐฉ๋ฒ๋ก ์ ๋ฐ๋ฅด๋ ํ ์คํธ๋ฅผ ์์ฑํ๋๋ฐ ์ ํฉ
jsdom
์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ์ค์ ๋ธ๋ผ์ฐ์ DOM์ ๊ธฐ์ค์ผ๋ก ํ ์คํธ๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ด๋ค React ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋์ง๋ณด๋ค, ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ ์์ ๋ ๋๋งํ๋ ์ค์ HTML ๋งํฌ์ ์ ๋ชจ์ต์ด ์ด๋ค์ง์ ๋ํด์ ํ ์คํธํ๊ธฐ ์ฉ์ด
Enzyme
์ด๋ผ๋ ํ ์คํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฆฌ์กํธ VDOM์ ๊ธฐ์ค์ผ๋ก ํ ์คํธ๋ฅผ ์์ฑํ์ฌ Implementation Driven Test ๋ฐฉ๋ฒ๋ก ์ ๋ฐ๋ฆ
React Testing Library ์ฃผ์ API
render()
ํจ์ : DOM์ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งfireEvent
๊ฐ์ฒด : ํน์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํด์ฟผ๋ฆฌํจ์ : DOM์์ ํน์ ์์ญ์ ์ ํ
render()
ํจ์
render()
ํจ์@testing-library/react
๋ชจ๋๋ก๋ถํฐ ๋ฐ๋ก ์ํฌํธ ๊ฐ๋ฅ์ธ์๋ก ๋ ๋๋งํ React ์ปดํฌ๋ํธ๋ฅผ ๋๊น
React Testing Library์ฌ ์ ๊ณตํ๋ ๋ชจ๋ ์ฟผ๋ฆฌํจ์์ ๊ธฐํ ์ ํธ๋ฆฌํฐ ํจ์๋ฅผ ๋ด๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋ฏ๋ก destructuring ๋ฌธ๋ฒ์ผ๋ก
render()
ํจ์๊ฐ ๋ฆฌํดํ ๊ฐ์ฒด๋ก๋ถํฐ ์ํ๋ ์ฟผ๋ฆฌํจ์๋ง ์ป์ด์ฌ ์ ์์
์ฟผ๋ฆฌํจ์
๋ ๋๋ง๋ DOM๋ ธ๋์ ์ ๊ทผํ์ฌ ์๋ฆฌ๋จผํธ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฉ์๋
์ฟผ๋ฆฌ ํ์
/ํ๊ฒ ๊ฐ์
/ํ๊ฒ ์ ํ
์ผ๋ก ๊ตฌ์ฑ ex)get``All``ByRole
์ฟผ๋ฆฌํ์
get
: ๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฉฐ ํ๊ฒ์ ์ฐพ์ง๋ชปํ ์ ์๋ฌ๋ฅผ ๋์งfind
: ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฉฐ ํ๊ฒ์ ์ฐพ์ง ๋ชปํ ์ ์๋ฌ๋ฅผ ๋์งquery
: ๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฉฐ ํ๊ฒ์ ์ฐพ์ง ๋ชปํ ์null
์ ๋ฐํ
ํ๊ฒ์ ๊ฐ์
๋ค์์ ์๋ฆฌ๋จผํธ๊ฐ ํ์๋๋ ์ํฉ์ด๋ผ๋ฉด ๋ค์
All
์ ๋ถ์
ํ๊ฒ ์ ํ
ByRole
,ByLabelText
,ByPlaceholderText
,ByText
,ByDisplayValue
,ByAltText
,ByTitle
,ByTestId
์ ์ ์ปดํฌ๋ํธ ํ
์คํ
Page Not Found ์ปดํฌ๋ํธ ์์
h2
๊ฐ ๋ ๋๋ง ๋๊ณ ์๋์ง ๊ฒ์ฆ
<NotFound />
์ปดํฌ๋ํธ๋ฅผ ์ํฌํธํด์render()
์ ์ธ์๋ก ๋๊ธด ํ์ ๋ฆฌํด ๊ฐ์ฒด๋ก๋ถํฐgetByText()
ํจ์๋ฅผ ์ป์ํ๋ฉด์์ ๊ฒ์ํ ํ ์คํธ์ธ
Page Not Found
๋ฅผgetByText()
์ ์ธ์๋ก ๋๊ฒจ<h2/>
์๋ฆฌ๋จผํธ๋ฅผ ์ป์jest-dom
์toBeInTheDocument()
matcher ํจ์๋ฅผ ์ด์ฉํด์ ํด๋น<h2/>
์๋ฆฌ๋จผํธ๊ฐ ํ๋ฉด์ ์กด์ฌํ๋ ๊ฒ์ฆ
p
๊ฐ ๋ ๋๋ง ๋๊ณ ์๋์ง ๊ฒ์ฆ
์ ๊ท์์ผ๋ก
<p/>
์์ ํ ์คํธ๊ฐ ํฌํจ๋ ์์๋ฅผ ๊ฐ์ ธ์ด๊ฐ์ ธ์จ ์์์ ํ ์คํธ๊ฐ ์์๊ณผ ์ผ์นํ๋์ง ๊ฒ์ฆ
img
๊ฐ ๋ ๋๋ง ๋๊ณ ์๋์ง ๊ฒ์ฆ
์ด๋ฏธ์ง ํ๊ทธ๋ ํ ์คํธ๊ฐ ์๊ธฐ ๋๋ฌธ์
alt
์์ฑ๊ฐ์ ์ด์ฉjest-dom
์toHaveAttribute()
matcher ํจ์๋ฅผ ์ด์ฉํด์<img/>
์๋ฆฌ๋จผํธ์src
์์ฑ๊ฐ์ด ์ ํํ์ง ๊ฒ์ฆ
๋์ ์ปดํฌ๋ํธ ํ
์คํ
๋ด๋ถ ์ํ์ ๋ฐ๋ผ UI์ ๋ณํ๊ฐ ์๊ธธ ์ ์๋ ์ปดํฌ๋ํธ ํ ์คํธ
์ด๋ฉ์ผ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํด์ผ ๋ก๊ทธ์ธ ๋ฒํผ์ด ํ์ฑํ ๋๋ ์์
๋ก๊ทธ์ธ ๋ฒํผ์ ๊ฒฝ์ฐ์๋
getByText()
์ฟผ๋ฆฌ ํจ์๋ฅผ ํตํด ์ ํํ๊ณ , ์ด๋ฉ์ผ๊ณผ ๋น๋ฐ๋ฒํธ ์ ๋ ฅ์นธ์getByLabelText()
์ฟผ๋ฆฌ ํจ์๋ก ์ ํjest-dom์
toBeDisabled()
์toBeEnabled()
matcher ํจ์๋ฅผ ํตํด์ ๋ก๊ทธ์ธ ๋ฒํผ์ ํ์ฑํ ์ฌ๋ถ๋ฅผ ์ด๋ฒคํธ ๋ฐ์ ์ ํ๋ก ๊ฒ์ฆ๋ ๊ฐ์ ์ ๋ ฅ์นธ์ change ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๊ธฐ ์ํด์
fireEvent.change()
ํจ์๋ฅผ ์ฌ์ฉ
๋ก๊ทธ์ธ ๋ฒํผ์ ํด๋ฆญํ์๋ prop์ผ๋ก ๋๊ธด onSubmit
ํจ์๊ฐ ํธ์ถ๋๋์ง ๊ฒ์ฆ
Mocking
์์ ์์ ์์ onSubmit์ ์ ๋ฌํ ํจ์๋ฅผ jest.fn()
์ ์ด์ฉํด์ ๋ง๋ค์์
mocking: ๋จ์ํ ์คํธ๋ฅผ ์์ฑํ ๋ ํด๋น ์ฝ๋๊ฐ ์์กดํ๋ ๋ถ๋ถ์ ๊ฐ์ง(mock)๋ก ๋์ฒดํ๋ ๊ธฐ๋ฒ
jest.fn()
jest.fn()
ํจ์๋ฅผ ์ด์ฉํด ๊ฐ์ง ํจ์๋ฅผ ์์ฑํ ์ ์์
์ผ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ธ์๋ฅผ ๋๊ฒจ ํธ์ถํ ์ ์์
mockReturnValue(๋ฆฌํด๊ฐ)
ํจ์๋ฅผ ์ด์ฉํด์ ์ด๋ค ๊ฐ์ ๋ฆฌํดํด์ผํ ์ง ์ ํด์ค ์ ์์
mockResolvedValue(Promise๊ฐ resolveํ๋ ๊ฐ)
ํจ์๋ฅผ ์ด์ฉํด์ ๊ฐ์ง ๋น๋๊ธฐ ํจ์๋ฅผ ๋ง๋ค ์ ์์
mockImplementation(๊ตฌํ ์ฝ๋)
ํจ์๋ก ์ฌ๊ตฌํํ ์ ์์
๊ฐ์งํจ์์ฉ Jest Matcher์ธ toBeCalled***
ํจ์๋ฅผ ์ด์ฉํด์ ๊ฐ์งํจ์๊ฐ ๋ช๋ฒ ํธ์ถ๋์๊ณ ์ธ์๋ก ๋ฌด์์ด ๋์ด์์๋์ง๋ฅผ ๊ฒ์ฆํ ์ ์์
jest.spyOn()
์ด๋ค ๊ฐ์ฒด์ ์ํ ํจ์์ ๊ตฌํ์ ๊ฐ์ง๋ก ๋์ฒดํ์ง ์๊ณ , ํด๋น ํจ์์ ํธ์ถ์ฌ๋ถ์ ์ด๋ป๊ฒ ํธ์ถ๋์๋์ง๋ง์ ์์๋ด์ผํ๋ ๊ฒฝ์ฐ
Given - When - Then
BDD
Behavior Driven Development
์๋๋ฆฌ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์ค๋ฅด ์ผ์ด์ค๋ฅผ ์์ฑํ๋ฉฐ ํจ์๋จ์ ํ ์คํธ๋ฅผ ๊ถ์ฅํ์ง ์์
Given - When - Then ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ ๊ฒ์ ๊ถ์ฅ
Given - When - Then ํจํด
Given : ํ ์คํธ ์ํ๋ฅผ ์ค๋ช
When : ๊ตฌ์ฒดํํ๊ณ ์ ํ๋ ํ๋
Then : ์์๋๋ ๋ณํ
Test fixture
ํ ์คํธ ์คํ์ ์ํด ๋ฒ ์ด์ค๋ผ์ธ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฐ์ฒด๋ค์ ๊ณ ์ ๋ ์ํ
๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ณต๊ฐ๋ฅํ ์ ์๊ณ ๊ณ ์ ๋ ํ๊ฒฝ์์ ํ ์คํธํ ์ ์๊ฒ ๋จ
์ค๋ณต ๋ฐ์๋๋ ํ์๋ฅผ ๊ณ ์ ์์ผ ํ๊ณณ์์ ๊ด๋ฆฌ
jest
beforeEach
๋ฅผ ํตํด ํด๋น ํ์ผ ํน์ ํด๋์ค ๋ด๋ถ์ ํจ์๋ค์ด ์์ํ๊ธฐ ์ ์ ํญ์ ์ํํ ์ผ์ ์ง์ ํ ์ ์์(afterEach
๋ ๊ฐ ํจ์ ์คํ ํ์)beforeAll()
,afterAll()
์ ๊ฐ๊ฐ ํจ์์ ์ ํ์ ๋งค๋ฒ ํธ์ถ๋๋ ๊ฒ์ด ์๋๋ผ ๋งจ ์ฒ์๊ณผ ๋งจ ๋์ ๋ฑ ํ ๋ฒ์ฉ๋ง ํธ์ถ๋จ
Last updated