Skip to content

[React] Jest

Kim Hyewon edited this page Jun 20, 2022 · 2 revisions

TDD

  • ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ๋งŒ๋“ค๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์„ ์งœ๋Š” ๊ฒƒ
  • ๋งŒ๋“œ๋Š” ๊ณผ์ •์—์„œ ์šฐ์„  ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ทธ๊ฑธ ํ†ต๊ณผํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๊ณ ๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ ๊ทน์ ์œผ๋กœ ๋ฐ›๋Š” ๊ฒƒ.

๋นจ๊ฐ•, ๋…น์ƒ‰ ๋ฆฌํŒฉํ„ฐ๋ง

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

jest

๊ณต์‹ ๋ฆฌ์•กํŠธ ๋ฌธ์„œ์—์„œ ๊ถŒ์žฅํ•˜๋Š” ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ JSDOM์„ ํ†ตํ•ด DOM์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” JS ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ

ํ™˜๊ฒฝ ๊ตฌ์ถ•ํ•˜๊ธฐ

  • cra๋กœ ์ดˆ๊ธฐํ™”๋œ ํ”„๋กœ์ ํŠธ์— jest ํŒจํ‚ค์ง€๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์„ค์น˜๋จ
  • testํ•˜๋ ค๋Š” js ํŒŒ์ผ๊ณผ test ํ•จ์ˆ˜๊ฐ€ ์žˆ๋Š” test.js ํ•„์š”

test function

test('simple test', ()=>{
   expect();
});
  • ์ธ์ž๋กœ test ๋ช…, ํ…Œ์ŠคํŠธ ๋Œ€์ƒ ํ•จ์ˆ˜, ํƒ€์ž„์•„์›ƒ ์ง€์ •

expect

  • ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๊ฐ’์ด ํŠน์ • ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์šฉ๋„
  • expect ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” matcher๋ฅผ ํ†ตํ•ด ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์ฆํ•จ

matcher

  1. toBe
  • ๊ธฐ๋ณธ ๊ฐ’์„ ๋น„๊ตํ•˜๊ฑฐ๋‚˜ ๊ฐœ์ฒด ์ธ์Šคํ„ด์Šค์˜ ์ฐธ์กฐ ID๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ.
  1. toEqaul
  • ์ฐธ์กฐ ์œ„์น˜ ๊ณ ๋ ค ์•ˆํ•จ, ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด์„ ํ…Œ์ŠคํŠธํ• ๋–„ ์‚ฌ์šฉ.

react component test

React Testing Library๋Š” ๋งค์šฐ ์‹ฌํ”Œํ•˜์ง€๋งŒ ๊ฐ•๋ ฅํ•œ API๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํฌ๊ฒŒ DOM์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋žœ๋”๋ง ํ•ด์ฃผ๋Š” render() ํ•จ์ˆ˜์™€, ํŠน์ • ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ์ฃผ๋Š” fireEvent ๊ฐ์ฒด, ๊ทธ๋ฆฌ๊ณ  DOM์—์„œ ํŠน์ • ์˜์—ญ์„ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์ฟผ๋ฆฌ ํ•จ์ˆ˜๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

render

  • render() ํ•จ์ˆ˜๋Š” @testing-library/react ๋ชจ๋“ˆ๋กœ ๋ถ€ํ„ฐ ๋ฐ”๋กœ ์ž„ํฌํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ธ์ž๋กœ ๋žœ๋”๋งํ•  React ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐ›์Œ.
  • React Testing Library ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ์ฟผ๋ฆฌ ํ•จ์ˆ˜์™€ ๊ธฐํƒ€ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ด

fireEvent

  • fireEvent ๊ฐ์ฒด๋Š” ์ฟผ๋ฆฌ ํ•จ์ˆ˜๋กœ ์„ ํƒ๋œ ์˜์—ญ์„ ๋Œ€์ƒ์œผ๋กœ ํŠน์ • ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ด๋ฒคํŠธ ํ•จ์ˆ˜ return

์ฐธ๊ณ 

https://gmlwjd9405.github.io/2018/06/03/agile-tdd.html

https://medium.com/@taeksoon/%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%A3%BC%EB%8F%84-%EA%B0%9C%EB%B0%9C-tdd-by-example-b3751ea90e71

https://goforit.tistory.com/135

https://runebook.dev/ko/docs/jest/expect

https://www.daleseo.com/react-testing-library/

Clone this wiki locally