๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ—‚ WIL/๐Ÿ“ React

TDD ๋„์ „ํ•ด๋ณด์ž.(1) - React Testing Library ? Jest ?

by nalong 2022. 8. 24.

TDD๋ฅผ ์ ์šฉํ•ด์•ผ ํ•˜๋Š” ์ผ์ด ์ƒ๊ฒจ์„œ ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ–ˆ๋Š”๋ฐ, React ์—๋Š” ์ด๋ฏธ Testing Library ๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ํ•œ๋‹ค!? 

# React Testing Library 

โœ”๏ธ ์„ค์น˜ ๋ฐฉ๋ฒ•๋„ ๊ธฐ์กด CRA์™€ ๋˜‘๊ฐ™๋‹ค!

๊ทธ๋ฆฌ๊ณ  ์„ค์น˜๊ฐ€ ๋๋‚˜๋ฉด npm test ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ์„ค๋ช…์ด ๊ธฐ์žฌ๋˜์–ด์žˆ์—ˆ๋‹ค...! 

โœ”๏ธ npm test ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ๋ช…๋ น์–ด๋“ค์ด ๋‚˜์˜จ๋‹ค. 

a๋ฅผ ์‹คํ–‰ํ•˜๋ฉด...! App.test.js ๊ฐ€ ์‹คํ–‰๋˜๊ณ , Pass ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

โœ”๏ธ ๊ทธ๋Ÿผ? App.test.js ์—์„œ ๋ฌด์—‡์„ ํ…Œ์ŠคํŠธํ•œ ๊ฒƒ์ผ๊นŒ?   

( App.test.js ํŒŒ์ผ์€ ๊ทธ์ € ๋งค๋ฒˆ CRA ์„ค์น˜ ํ›„ ์‚ญ์ œํ–ˆ๋˜ ํŒŒ์ผ์ด์—ˆ์ง€ ์–ด๋–ค ํŒŒ์ผ์ธ์ง€๋Š” ์•Œ์•„๋ณด์ง€ ์•Š์•˜์—ˆ๋‹ค.๐Ÿ˜ฎ‍๐Ÿ’จ ) 

App.test.js
App.js

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 ์— ๋“ค์–ด์žˆ๋Š”์ง€ ํ™•์ธ.
});

์ƒ์„ฑํ•œ ๋ฒ„ํŠผ์ด&nbsp; "๋ฒ„ํŠผ" ์ธ์ง€ ํ™•์ธํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ

# ๊ทธ๋Ÿผ Jest ๋Š” ? 

๋‚˜๋Š” Jest ๋ฅผ ์‚ฌ์šฉํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด์•ผ ํ–ˆ๊ธฐ์—, Jest๋ฅผ ์•Œ์•„๋ณด์ž.

๊ทผ๋ฐ ์ด๋ฏธ CRA ์—๋Š” Jest ์ด ๊ฐ™์ด ์„ค์น˜๋˜์–ด ์žˆ๋‹ค........?

 

๊ทธ๋Ÿผ React Testing Library = Jest ...? ๐Ÿค”

 

# React Testing Library ์™€ Jest๋Š” ์ƒํ˜ธ๋ณด์™„ ๊ด€๊ณ„! ๐Ÿค

Jest ๊ณต์‹๋ฌธ์„œ์—์„œ ๋‘˜์˜ ๊ด€๊ณ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

##  expect 

expect ๋Š” ๊ฐ’์„ ํ…Œ์ŠคํŠธํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. ๋‹ค๋งŒ, ํ˜ผ์ž ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  matcher ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ๋‹ค.

##  matchers  

์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ’์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ผ๊ณ  ์ดํ•ดํ•˜์˜€๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด

toBe ๋ฉ”์„œ๋“œ๋Š” === ์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์„œ ํ™•์ธํ•ด๋ณด์ž! 

๊ฐ’์ด ๊ฐ™์œผ๋ฉด pass
๊ฐ’์ด ๋‹ค๋ฅด๋ฉด fail

matcher ๋Š” ์•„๋ž˜ ๊ณต์‹๋ฌธ์„œ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค! 

 

Jest · ๐Ÿƒ Delightful JavaScript Testing

๐Ÿƒ Delightful JavaScript Testing

mulder21c.github.io

# ๊ทธ๋Ÿผ ๋งˆ์ง€๋ง‰์œผ๋กœ  ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์„ ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

๊ทธ๋Ÿผ ๊ฐœ๋ฐœ ์ˆœ์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

TDD ๊ฐœ๋ฐœ์ฃผ๊ธฐ

1. ์‹คํŒจํ•˜๋Š” ์ž‘์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ์ฒ˜์Œ์—๋Š” ์ปดํŒŒ์ผ์กฐ์ฐจ ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
2. ๋นจ๋ฆฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์ •๋‹ต์ด ์•„๋‹Œ ๊ฐ€์งœ ๊ตฌํ˜„ ๋“ฑ์„ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
3. ๊ทธ ๋‹ค์Œ์˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ์‹คํŒจ ํ…Œ์ŠคํŠธ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ์—๋งŒ ์„ฑ๊ณต ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
4. ์ƒˆ๋กœ์šด ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ ๋˜๋Š” ์ˆ˜์ •ํ•œ๋‹ค.
5. 1~4๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ์‹คํŒจ/์„ฑ๊ณต์˜ ๋ชจ๋“  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
6. ๊ฐœ๋ฐœ๋œ ์ฝ”๋“œ๋“ค์— ๋Œ€ํ•ด ๋ชจ๋“  ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋ฉฐ ๋ฆฌํŒฉํ† ๋งํ•œ๋‹ค.
 

[TDD] ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ TDD(ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ) ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ• ์†Œ๊ฐœ - (1/5)

์ด๋ฒˆ์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ ์„œ์ ๋“ค ๋ฐ ์‹ค๋ฌด ๊ฒฝํ—˜ ๊ทธ๋ฆฌ๊ณ  ์‹œํ–‰ ์ฐฉ์˜ค ๋“ฑ์„ ๊ฒช์œผ๋ฉด์„œ ์–ป์€ ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋จผ์ € ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ ์ค‘์š”์„ฑ ๊ทธ๋ฆฌ๊ณ  ๋‹จ์œ„

mangkyu.tistory.com

์œ„ ๋ธ”๋กœ๊ทธ์— ์ƒ์„ธํžˆ ๊ธฐ์žฌ๋˜์–ด ์žˆ์–ด์„œ ์‚ดํŽด๋ณด์•˜๋Š”๋ฐ,

TDD๋ฅผ ์“ด ๊ฒƒ์ฒ˜๋Ÿผ ํ‰๋‚ด๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„์ง€...๐Ÿฅฒ     

์ผ๋‹จ ํ™”์ดํŒ…...๐Ÿ’ช