TDD๋ฅผ ์ ์ฉํด์ผ ํ๋ ์ผ์ด ์๊ฒจ์ ๊ณต๋ถ๋ฅผ ์์ํ๋๋ฐ, React ์๋ ์ด๋ฏธ Testing Library ๊ฐ ์กด์ฌํ๋ค๊ณ ํ๋ค!?
# React Testing Library
โ๏ธ ์ค์น ๋ฐฉ๋ฒ๋ ๊ธฐ์กด CRA์ ๋๊ฐ๋ค!
๊ทธ๋ฆฌ๊ณ ์ค์น๊ฐ ๋๋๋ฉด npm test ๋ช ๋ น์ด์ ๋ํ ์ค๋ช ์ด ๊ธฐ์ฌ๋์ด์์๋ค...!
โ๏ธ npm test ๋ฅผ ์คํํ๋ฉด, ์๋์ ๊ฐ์ด ๋ช ๋ น์ด๋ค์ด ๋์จ๋ค.
a๋ฅผ ์คํํ๋ฉด...! App.test.js ๊ฐ ์คํ๋๊ณ , Pass ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
โ๏ธ ๊ทธ๋ผ? App.test.js ์์ ๋ฌด์์ ํ ์คํธํ ๊ฒ์ผ๊น?
( App.test.js ํ์ผ์ ๊ทธ์ ๋งค๋ฒ CRA ์ค์น ํ ์ญ์ ํ๋ ํ์ผ์ด์์ง ์ด๋ค ํ์ผ์ธ์ง๋ ์์๋ณด์ง ์์์๋ค.๐ฎ๐จ )
test('renders learn react link', () => {
render(<App />); // App ์ปดํฌ๋ํธ๊ฐ ๋๋๋ง ๋๋ค.
const linkElement = screen.getByText(/learn react/i);
// "learn react" ํ
์คํธ๋ฅผ ๊ฐ์ง๊ณ ์๋ element ๋ฅผ linkElement ๋ณ์์ ํ ๋น.
expect(linkElement).toBeInTheDocument();
// ํด๋น element ๊ฐ App document ์ ๋ค์ด์๋์ง ํ์ธ.
});
# ๊ทธ๋ผ Jest ๋ ?
๋๋ Jest ๋ฅผ ์ฌ์ฉํ ๋จ์ ํ ์คํธ๋ฅผ ํด์ผ ํ๊ธฐ์, Jest๋ฅผ ์์๋ณด์.
๊ทผ๋ฐ ์ด๋ฏธ CRA ์๋ Jest ์ด ๊ฐ์ด ์ค์น๋์ด ์๋ค........?
๊ทธ๋ผ React Testing Library = Jest ...? ๐ค
# React Testing Library ์ Jest๋ ์ํธ๋ณด์ ๊ด๊ณ! ๐ค
## expect
expect ๋ ๊ฐ์ ํ ์คํธํ ๋ ์ฌ์ฉ๋๋ค. ๋ค๋ง, ํผ์ ์ฌ์ฉ๋์ง ์๊ณ matcher ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ค.
## matchers
์ฌ๋ฌ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ ํ ์คํธํ๋ ๋ฉ์๋๋ผ๊ณ ์ดํดํ์๋ค.
์๋ฅผ ๋ค์ด
toBe ๋ฉ์๋๋ === ์ด๋ผ๊ณ ํ๋ค. ์ฝ๋๋ฅผ ์คํํด์ ํ์ธํด๋ณด์!
matcher ๋ ์๋ ๊ณต์๋ฌธ์๋ฅผ ํตํด ํ์ธํ ์ ์๋ค!
Jest · ๐ Delightful JavaScript Testing
๐ Delightful JavaScript Testing
mulder21c.github.io
# ๊ทธ๋ผ ๋ง์ง๋ง์ผ๋ก ๋จ์ ํ ์คํธ์ ๋ํด ์์๋ณด์.
๋จ์ ํ ์คํธ๋ ํ๋์ ๋ชจ๋์ ๊ธฐ์ค์ผ๋ก ํ ์คํธํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ๊ฐ๋ฐ ์์๋ ์ด๋ป๊ฒ ํด์ผํ ๊น?
1. ์คํจํ๋ ์์ ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ๋ค. ์ฒ์์๋ ์ปดํ์ผ์กฐ์ฐจ ๋์ง ์์ ์ ์๋ค.
2. ๋นจ๋ฆฌ ํ ์คํธ๋ฅผ ํต๊ณผํ๊ธฐ ์ํด ํ๋ก๋์ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ์ด๋ฅผ ์ํด ์ ๋ต์ด ์๋ ๊ฐ์ง ๊ตฌํ ๋ฑ์ ์์ฑํ ์๋ ์๋ค.
3. ๊ทธ ๋ค์์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ์คํจ ํ ์คํธ๊ฐ ์์ ๊ฒฝ์ฐ์๋ง ์ฑ๊ณต ํ ์คํธ๋ฅผ ์์ฑํ๋ค.
4. ์๋ก์ด ํ ์คํธ๋ฅผ ํต๊ณผํ๊ธฐ ์ํด ํ๋ก๋์ ์ฝ๋๋ฅผ ์ถ๊ฐ ๋๋ ์์ ํ๋ค.
5. 1~4๋จ๊ณ๋ฅผ ๋ฐ๋ณตํ์ฌ ์คํจ/์ฑ๊ณต์ ๋ชจ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๋ค.
6. ๊ฐ๋ฐ๋ ์ฝ๋๋ค์ ๋ํด ๋ชจ๋ ์ค๋ณต์ ์ ๊ฑฐํ๋ฉฐ ๋ฆฌํฉํ ๋งํ๋ค.
[TDD] ๋จ์ ํ ์คํธ์ TDD(ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ) ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ ์๊ฐ - (1/5)
์ด๋ฒ์๋ ์ฌ๋ฌ ๊ฐ๋ฐ ์์ ๋ค ๋ฐ ์ค๋ฌด ๊ฒฝํ ๊ทธ๋ฆฌ๊ณ ์ํ ์ฐฉ์ค ๋ฑ์ ๊ฒช์ผ๋ฉด์ ์ป์ ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํด๋ณด๊ณ ์ ํฉ๋๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ ๋จผ์ ๋จ์ ํ ์คํธ์ ์ค์์ฑ ๊ทธ๋ฆฌ๊ณ ๋จ์
mangkyu.tistory.com
์ ๋ธ๋ก๊ทธ์ ์์ธํ ๊ธฐ์ฌ๋์ด ์์ด์ ์ดํด๋ณด์๋๋ฐ,
TDD๋ฅผ ์ด ๊ฒ์ฒ๋ผ ํ๋ด๋ด๋ ๊ฒ์ด ์๋ ์ ๋๋ก ์ฌ์ฉํ ์ ์์์ง...๐ฅฒ
์ผ๋จ ํ์ดํ ...๐ช
'๐ WIL > ๐ React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Axios Interceptors ? (0) | 2022.09.05 |
---|---|
TDD ๋์ ํด๋ณด์.(2) - TypeScript ์ ์ ์ฉ (0) | 2022.08.27 |
Scroll ์ด๋ฒคํธ ๋์ Intersection Observer API ์ด์ฉํ์! (0) | 2022.08.24 |
React Query (์ด์ TanStack Query ๋ผ๊ณ ๋ถ๋ฆฌ๋ ..) ์ ์ฉ (1) (0) | 2022.08.19 |
๐งฌ Atomic ๋์์ธ์ ์ ์ฉํด๋ณด์. (0) | 2022.08.13 |