Giter VIP home page Giter VIP logo

jest's Introduction

🧩 React Testing Library (RTL) vs Jest

RTL

  • RTL은 ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ 가상 돔을 μ œκ³΅ν•œλ‹€.
  • λΈŒλΌμš°μ €μ—†μ΄ ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄ 클릭 μš”μ†Œμ™€ 같은 μž‘μ—…μ„ ν•  λ•Œ 가상 돔이 ν•„μš”ν•˜λ‹€.
  • 그리고 가상 돔이 μ›ν•˜λŠ”λŒ€λ‘œ μž‘λ™ν•˜λŠ”μ§€ 확인 κ°€λŠ₯
  • DOMκ³Ό μƒν˜Έ μž‘μš©ν•˜κΈ° μœ„ν•œ μœ ν‹Έλ¦¬ν‹°λ„ μ œκ³΅ν•œλ‹€. 예λ₯Ό λ“€μ–΄, DOMμ—μ„œ μš”μ†Œλ₯Ό 찾을 수 μžˆκ±°λ‚˜ 클릭과 같은 μš”μ†Œμ™€ μƒν˜Έ μž‘μš©ν•  수 μžˆλ‹€.
  • λΈŒλΌμš°μ € 없이도 ν…ŒμŠ€νŠΈ κ°€λŠ₯ν•˜κ²Œ ν•œλ‹€.

Jest

  • ν…ŒμŠ€νŠΈλ₯Ό μ°Ύκ³  μ‹€ν–‰ν•˜λŠ” 것과 ν…ŒμŠ€νŠΈ 톡과 μ—¬λΆ€λ₯Ό κ²°μ •ν•˜λŠ” 역할을 ν•œλ‹€.

ν…ŒμŠ€νŠΈ μ‹œμž‘

ν…ŒμŠ€νŠΈ ν•  λ•ŒλŠ” npm test λΌλŠ” λͺ…λ Ήμ–΄λ‘œ ν•˜λ©΄ λœλ‹€. npm testλŠ” Jestμ—μ„œ Watch λͺ¨λ“œ μ‹€ν–‰μœΌλ‘œ μ‹œμž‘ν•œλ‹€.

μ—¬κΈ°μ„œ ν…ŒμŠ€νŠΈν•  것은 aλ₯Ό μž…λ ₯ν•˜λ©΄ a에 κ΄€ν•œ ν…ŒμŠ€νŠΈ κ²°κ³Όκ°€ λ‚˜μ˜¨λ‹€.

ν…ŒμŠ€νŠΈ 성곡 ! ν–ˆλ‹€λŠ” λœ»μ΄λ‹€. src/App.test.js 파일이 ν…ŒμŠ€νŠΈ νŒŒμΌμ΄λ‹€. qλ₯Ό μž…λ ₯ν•˜λ©΄ jest의 Watch λͺ¨λ“œκ°€ μ’…λ£Œλœλ‹€.

src/App.test.js 파일 μ½”λ“œ

import { render, screen } from "@testing-library/react";
import App from "./App";

test("renders learn react link", () => {
  render(<App />);
  const linkElement = screen.getByText(/learn testing library/i);
  expect(linkElement).toBeInTheDocument();
});

μœ„ μ½”λ“œκ°€ npm testλ₯Ό μ‹€ν–‰ν–ˆμ„ λ•Œ μ‹€ν–‰λ˜λ˜ ν…ŒμŠ€νŠΈλ‹€. μœ„ μ½”λ“œλ₯Ό ν•œ 쀄 ν•œ 쀄 μ‚΄νŽ΄λ³΄μž!

  • render : ν…ŒμŠ€νŠΈ ν•¨μˆ˜μ—μ„œλŠ” 첫 번째둜 이 renderλΌλŠ” λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•œλ‹€. render λ©”μ„œλ“œλŠ” 인수둜 μ œκ³΅ν•˜λŠ” JSX에 κ΄€ν•œ 가상돔을 μƒμ„±ν•œλ‹€. (= μ»΄ν¬λ„ŒνŠΈ)
  • screen.getByText : λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•˜λ©° ν‘œμ‹œλ˜λŠ” λͺ¨λ“  ν…μŠ€νŠΈλ₯Ό 기반으둜 DOMμ—μ„œ μš”μ†Œλ₯Ό μ°ΎλŠ”λ‹€.
  • (/learn react/i) : geyByText의 μΈμˆ˜λŠ” μ •κ·œ ν‘œν˜„μ‹μ΄λ‹€. App.js 파일 μ•ˆμ—

μ΄λ ‡κ²Œ learn react 이 단어가 μ—†μœΌλ©΄ ν…ŒμŠ€νŠΈλŠ” μ‹€νŒ¨λœλ‹€.

μ‹€νŒ¨λœ λͺ¨μŠ΅

  • expect(linkElement).toBeInTheDocument(); : Jest의 단언이닀. 단언은 ν…ŒμŠ€νŠΈ 성곡과 μ‹€νŒ¨μ˜ 원인이닀. λ³΅μž‘ν•˜λ©΄μ„œλ„ μ€‘μš”ν•˜λ‹€.

Jest 단언(Assertion)

ν…ŒμŠ€νŠΈμ˜ 톡과 μ—¬λΆ€λ₯Ό κ²°μ •ν•œλ‹€. Jestμ—μ„œ μ „μ—­ λ©”μ„œλ“œμΈ expect λ©”μ„œλ“œλ‘œ μ‹œμž‘ν•œλ‹€. 그리고 μΈμˆ˜κ°€ μžˆλŠ”λ°, μΈμˆ˜λŠ” 단언이 λ‹¨μ–Έν•˜λŠ” κ²ƒμœΌλ‘œ μ˜ˆμΈ‘μ— λ“€μ–΄λ§žλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ Jestμ—μ„œ ν™•μΈν•œλ‹€.

Jest-dom

이것은 CRA와 제곡되며 CRA와 ν•¨κ»˜ μ„€μΉ˜λœλ‹€. setupTests.js νŒŒμΌμ„ μ‚¬μš©ν•΄ 각 ν…ŒμŠ€νŠΈ 전에 jest-dom을 κ°€μ Έμ˜¨λ‹€. 즉, λͺ¨λ“  ν…ŒμŠ€νŠΈμ—μ„œ jest-dom 맀처λ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” 것이닀.

⭐️ Jestλ₯Ό 본격적으둜 λ°°μ›Œλ³΄μž ⭐️

ν…ŒμŠ€νŠΈ λŸ¬λ„ˆκ°€ ν•„μš”ν•˜λ‹€. ν…ŒμŠ€νŠΈλ₯Ό μ°Ύκ³  μ‹€ν–‰ν•˜λ©° 단언할 무언가가 ν•„μš”. -> μ΄λ•Œ Jestλ₯Ό μ‚¬μš©ν•œλ‹€.
Jestκ°€ μœ μΌν•œ ν…ŒμŠ€νŠΈ λŸ¬λ„ˆλŠ” μ•„λ‹ˆλ‹€.
Mochaλ‚˜ Jasmine(제슀민)도 μžˆμ§€λ§Œ, ν…ŒμŠ€νŒ… λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ Jestλ₯Ό ꢌμž₯ν•˜λ©° CRA와 ν•¨κ»˜ μ œκ³΅λœλ‹€.
κ·Έ 외에도 효율적이고 μ‚¬μš©μ΄ 쉽닀. npm testλ₯Ό ν•˜λ©΄ npm scriptλ₯Ό μ‹€ν–‰ν–ˆκ³  κ·Έ μŠ€ν¬λ¦½νŠΈκ°€ Jestλ₯Ό Watch λͺ¨λ“œλ‘œ μ‹€ν–‰λ˜κ²Œ ν•œλ‹€.
pagekage.json νŒŒμΌμ— κ°€λ©΄ scriptκ°€ μžˆλŠ”λ° testλ₯Ό μ‹€ν–‰ν•˜λ©΄ react-scripts testλ₯Ό μ‹€ν–‰ν•˜λŠ” 것이닀.

"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    πŸ“"test": "react-scripts test",
    "eject": "react-scripts eject"
  },

μ΄λ©΄μ—μ„œλŠ” Jestκ°€ Watch λͺ¨λ“œλ‘œ μ‹€ν–‰ 쀑이닀.
Watch λͺ¨λ“œλž€? Jestλ₯Ό μ‹€ν–‰ν•˜λŠ” λ°©λ²•μœΌλ‘œ λ§ˆμ§€λ§‰ 컀밋 이후 파일의 λͺ¨λ“  λ³€κ²½ 사항을 ν™•μΈν•΄μ„œ λ§ˆμ§€λ§‰ 컀밋 이후 λ³€κ²½λœ 파일과 μ—°κ΄€λœ ν…ŒμŠ€νŠΈλ§Œ μ‹€ν–‰ν•œλ‹€.


πŸ“ TDD

TDDλŠ” μ½”λ“œ μž‘μ„± 전에 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κ³  ν…ŒμŠ€νŠΈμ— ν†΅κ³Όν•˜λ„λ‘ ν•œλ‹€!
ν”νžˆ λ ˆλ“œ-κ·Έλ¦° ν…ŒμŠ€νŠΈλΌκ³  ν•œλ‹€. μ½”λ“œ μž‘μ„± 전에 ν…ŒμŠ€νŠΈμ— μ‹€νŒ¨ν•˜λŠ” λ ˆλ“œ ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μ‹€ν–‰ν•˜κ³  μ½”λ“œ μž‘μ„± 후에 ν†΅κ³Όν•˜λŠ” ν…ŒμŠ€νŠΈλ‘œ κ·Έλ¦° ν…ŒμŠ€νŠΈλ₯Ό ν™•μΈν•˜λŠ” 것이닀.

  1. 보톡 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κΈ° 전에 μ•½κ°„μ˜ μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ—¬ ν…ŒμŠ€νŠΈμ— 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ ν•œλ‹€.
  2. ν•¨μˆ˜λ₯Ό μž‘μ„±ν•˜κ±°λ‚˜ ν•¨μˆ˜ν˜• λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈλ₯Ό μž‘μ„±ν•œλ‹€.
  3. μž‘μ„±μ‹œ μ•„λ¬΄λŸ° 이벀트λ₯Ό λ°œμƒμ‹œν‚€μ§€ μ•ŠλŠ” 빈 ν•¨μˆ˜λ₯Ό μž‘μ„±ν•œλ‹€.
  4. ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λ©΄, ν•¨μˆ˜κ°€ 아무것도 ν•˜μ§€μ•ŠκΈ° 떄문에 ν…ŒμŠ€νŠΈλŠ” μ‹€νŒ¨ν•  것이닀.
  5. μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ„œ ν…ŒμŠ€νŠΈμ— ν†΅κ³Όν•œλ‹€.
  6. ν…ŒμŠ€νŠΈμ— μ‹€νŒ¨μ‹œ λΉ¨κ°„μƒ‰μœΌλ‘œ ν‘œμ‹œ, μ„±κ³΅μ‹œ λ…Ήμƒ‰μœΌλ‘œ ν‘œμ‹œλœλ‹€.

TDD μ‚¬μš©ν•˜λŠ” 이유

  1. ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λŠ” 것이 ν”„λ‘œμ„ΈμŠ€μ˜ ν•œ λΆ€λΆ„μœΌλ‘œ λŠλΌλŠ” 방식에 차이가 μžˆλ‹€.
  2. μ½”λ”© ν”„λ‘œμ„ΈμŠ€μ˜ 일뢀이닀.
  3. νš¨μœ¨μ μ΄λ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜μ—¬ μ›ν•˜λŠ”λŒ€λ‘œ μž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•˜λ©΄μ„œ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ—…λ°μ΄νŠΈ 할텐데 μ΄λŠ” μˆ˜λ™μ μΈ μ—…λ°μ΄νŠΈμ΄λ‹€.
  4. μ½”λ“œ μž‘μ„± 전에 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λ©΄ λ³€κ²½ 후에 μžλ™μœΌλ‘œ λ‹€μ‹œ μ‹€ν–‰ν•  수 μžˆλ‹€.
  5. κ°œλ°œν•˜λ©΄μ„œ λͺ¨λ“  ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•΄ 두면 λ³€κ²½ 사항이 생길 λ•Œλ§ˆλ‹€ λͺ¨λ“  ν…ŒμŠ€νŠΈλ₯Ό λ‹€μ‹œ μ‹€ν–‰ν•΄μ„œ μžλ™ νšŒκ·€ ν…ŒμŠ€νŠΈλ₯Ό ν•  수 μžˆλ‹€.
  6. λ³€κ²½ 사항 확인을 μœ„ν•΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ—΄κ³  μˆ˜λ™μœΌλ‘œ ν…ŒμŠ€νŠΈν•  ν•„μš”κ°€ μ—†λ‹€.

μœ„μ™€ 같은 μ΄μœ λ“€λ‘œ ν…ŒμŠ€νŠΈ 주도 개발인 TDDλ₯Ό μ„ ν˜Έν•˜λŠ” 것이닀.




πŸ“ React ν…ŒμŠ€νŒ… 라이브러리의 μ² ν•™


μ’…λ₯˜

  1. β­οΈμœ λ‹›(Unit) ν…ŒμŠ€νŠΈβ­οΈλ‘œ 보톡 ν•¨μˆ˜λ‚˜ λ³„κ°œμ˜ λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈ μ½”λ“œμ˜ ν•œ μœ λ‹› ν˜Ήμ€ λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό ν•˜λŠ” 것이닀.
  2. ⭐️톡합 ν…ŒμŠ€νŠΈβ­οΈλŠ” μ—¬λŸ¬ μœ λ‹›μ΄ ν•¨κ»˜ μž‘λ™ν•˜λŠ” 방식을 ν…ŒμŠ€νŠΈν•΄μ„œ μœ λ‹› κ°„μ˜ μƒν˜Έ μž‘μš©μ„ ν…ŒμŠ€νŠΈν•˜λŠ” 것이닀.
    ex) μ»΄ν¬λ„ŒνŠΈ κ°„μ˜ μƒν˜Έ μž‘μš©μ„ ν…ŒμŠ€νŠΈν•˜κ±°λ‚˜ 마이크둜 μ„œλΉ„μŠ€ κ°„μ˜ μƒν˜Έ μž‘μš©μ„ ν…ŒμŠ€νŠΈν•œλ‹€.
  3. ⭐️기λŠ₯ ν…ŒμŠ€νŠΈβ­οΈλŠ” μ†Œν”„νŠΈμ›¨μ–΄μ˜ νŠΉμ • κΈ°λŠ₯을 ν…ŒμŠ€νŠΈ ν•˜λŠ” 것이닀.
  • function은 μ˜μ–΄λ‘œ ν•¨μˆ˜μ—μ„œ μž…λ ₯값을 μ·¨ν•˜κ³  좜λ ₯값을 μ œκ³΅ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ λ‹¨μœ„λ₯Ό μ˜λ―Έν•  수 있고 λ™μž‘μ„ μ˜λ―Έν•  μˆ˜λ„ μžˆλŠ”λ° 이 κ²½μš°μ—λŠ” λ™μž‘κ³Ό κ΄€λ ¨ν•œ μ˜λ―Έμ— ν•΄λ‹Ήλœλ‹€. νŠΉμ • μ½”λ“œ ν•¨μˆ˜κ°€ μ•„λ‹Œ μ†Œν”„νŠΈμ›¨μ–΄μ˜ 일반적인 λ™μž‘μ„ μ˜λ―Έν•œλ‹€. μ—¬κΈ°μ„œ λ§ν•˜λŠ” 일반적인 λ™μž‘μ΄λž€ 데이터λ₯Ό 폼에 μž…λ ₯ν•˜κ³  μ œμΆœμ„ ν΄λ¦­ν•˜λ©΄ μ†Œν”„νŠΈμ›¨μ–΄κ°€ νŠΉμ • 데이터 μ„ΈνŠΈλ‘œ λ°”λ₯΄κ²Œ μž‘λ™ν•˜λŠ” κΈ°λŠ₯을 확인해야 ν•œλ‹€.

μ—¬λŸ¬ μœ λ‹›μ΄ μžˆλŠ” 톡합 ν…ŒμŠ€νŠΈμΌ μˆ˜λ„ μž‡μ§€λ§Œ μœ λ‹› ν…ŒμŠ€νŠΈμΈ κΈ°λŠ₯ ν…ŒμŠ€νŠΈμΌ μˆ˜λ„ μžˆλ‹€. μž…λ ₯λž€μ— 잘λͺ»λœ 데이터λ₯Ό μž…λ ₯ν•˜λ©΄ λΉ¨κ°›κ²Œ λ³€ν•˜λŠ”μ§€ λ³΄λŠ” ν…ŒμŠ€νŠΈμΌ μˆ˜λ„ ? μœ λ‹› ν…ŒμŠ€νŠΈμ— κ°€κΉμ§€λ§Œ μ—¬μ „νžˆ κΈ°λŠ₯ ν…ŒμŠ€νŠΈμ΄λ‹€. κΈ°λŠ₯ ν…ŒμŠ€νŠΈμ˜ κ°œλ…μ€ μ½”λ“œκ°€ μ•„λ‹Œ λ™μž‘μ„ ν…ŒμŠ€νŠΈν•˜λŠ” 것이닀. λ§ˆμ§€λ§‰μ€ 인수 ν…ŒμŠ€νŠΈ ν˜Ήμ€ E2E (End to End) ν…ŒμŠ€νŠΈλ‘œ μ‹€μ œ λΈŒλΌμš°μ €κ°€ ν•„μš”ν•˜κ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ—°κ²°λœ μ„œλ²„κ°€ ν•„μš”ν•˜λ‹€. 보톡 Cypressλ‚˜ Seleniumκ³Ό 같은 νŠΉλ³„ν•œ 도ꡬ가 ν•„μš”ν•˜λ‹€. λ‹€λ₯Έ 도ꡬ듀도 μžˆμ§€λ§Œ 이 두 가지가 κ°€μž₯ 인기가 λ§Žλ‹€. 그리고 이 ν…ŒμŠ€νŠΈλŠ” RTL을 μœ„ν•΄ μ„€κ³„λœ ν…ŒμŠ€νŠΈκ°€ μ•„λ‹ˆλ‹€.




πŸ“ κΈ°λŠ₯(Functonal) ν…ŒμŠ€νŠΈμ™€ μœ λ‹›(Unit) ν…ŒμŠ€νŠΈ


πŸ”₯ μœ λ‹› ν…ŒμŠ€νŠΈ

  • ν…ŒμŠ€νŠΈλ₯Ό μ΅œλŒ€ν•œ 격리 μ‹œν‚¨λ‹€.

    κ·Έλž˜μ„œ ν•¨μˆ˜λ‚˜ μ»΄ν¬λ„ŒνŠΈλ₯Ό ν…ŒμŠ€νŠΈν•  λ•Œ μ˜μ‘΄μ„±μ„ ν‘œμ‹œν•œλ‹€. 즉, λ‹€λ₯Έ μ˜μ‘΄μ„±μ΄ μžˆκ±°λ‚˜ μ»΄ν¬λ„ŒνŠΈκ°€ μ˜μ‘΄ν•˜λŠ” λ‹€λ₯Έ ν•¨μˆ˜κ°€ μžˆλ‹€λ©΄ μ‹€μ œ 버전 λŒ€μ‹  ν…ŒμŠ€νŠΈ 버전을 μ‚¬μš©ν•œλ‹€. λ”°λΌμ„œ, λ¬Έμ œκ°€ λ°œμƒν•˜κ±°λ‚˜ ν…ŒμŠ€νŠΈ μ‹€νŒ¨ μ‹œ μƒνƒœκ³„μ˜ λ‹€λ₯Έ μ–΄λ–€ 것이 μ•„λ‹ˆλΌ ν…ŒμŠ€νŠΈμ— μ‹€νŒ¨ν•˜κ²Œ λ§Œλ“œλŠ” νŠΉμ • μœ λ‹›μ΄ 문제인 것이닀.

  • λ‚΄λΆ€ ν…ŒμŠ€νŠΈλ„ μ§„ν–‰ν•œλ‹€.

    λ‚΄λΆ€ ν…ŒμŠ€νŠΈκ°€ ν•„μš”ν•œ μ΄μœ λŠ” 격리 μƒνƒœμ—μ„œ μ»΄ν¬λ„ŒνŠΈλ₯Ό ν…ŒμŠ€νŠΈν•˜λ©΄ λ•Œλ‘œλŠ” μƒνƒœμ˜ 차이점에 κ΄€ν•΄μ„œλ§Œ ν…ŒμŠ€νŠΈν•˜κ²Œ 되기 λ•Œλ¬Έμ΄λ‹€. μ΄λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ³€κ²½ 사항을 ν™•μΈν•˜λŠ” λ‹€λ₯Έ μ»΄ν¬λ„ŒνŠΈκ°€ μ—†κΈ° λ•Œλ¬Έμ΄λ‹€. κ·Έλž˜μ„œ 격리된 μœ λ‹›μ—μ„œ μ‹€νŒ¨λ₯Ό 쉽고 μ •ν™•ν•˜κ²Œ νŒŒμ•…ν•  수 μžˆλ‹€. ν…ŒμŠ€νŠΈ μ½”λ“œμ˜ ν•œ μœ λ‹›μ— κ²©λ¦¬λ˜μ–΄ 있기 λ•Œλ¬Έμ— ν…ŒμŠ€νŠΈκ°€ μ‹€νŒ¨ν•˜λ©΄ μ–΄λ””λ₯Ό 확인해야 ν•˜λŠ”μ§€ μ •ν™•ν•˜κ²Œ μ•Œ 수 μžˆλ‹€.

단점

  • μ‚¬μš©μžκ°€ μ†Œν”„νŠΈμ›¨μ–΄μ™€ μƒν˜Έ μž‘μš©ν•˜λŠ” λ°©μ‹κ³ΌλŠ” 거리가 λ©€λ‹€.

    ν…ŒμŠ€νŠΈλ₯Ό 톡과할 μˆ˜μžˆλ‹€λŠ” 뜻. μ†Œν”„νŠΈμ›¨μ–΄μ™€ μƒν˜Έ μž‘μš©ν•˜λŠ” μ‚¬μš©μžκ°€ μ‹€νŒ¨ν•˜κ±°λ‚˜ λ°˜λŒ€λ‘œ μ‚¬μš©μžκ°€ μ†Œν”„νŠΈμ›¨μ–΄μ™€ μƒν˜Έ μž‘μš©ν•˜λŠ”λ° λ¬Έμ œκ°€ 없어도 ν…ŒμŠ€νŠΈμ— μ‹€νŒ¨ν•  수 μžˆλ‹€. μ‚¬μš©μžκ°€ μ†Œν”„νŠΈμ›¨μ–΄μ™€ μƒν˜Έ μž‘μš©ν•˜λŠ” λ°©μ‹κ³ΌλŠ” 쑰금 덜 λ°€μ ‘ν•˜κ²Œ μ—°κ²°λ˜μ–΄ 있기 λ•Œλ¬Έμ΄λ‹€.

  • ν…ŒμŠ€νŠΈλ₯Ό λ¦¬νŒ©ν† λ§μœΌλ‘œ μ‹€νŒ¨ν•  κ°€λŠ₯성도 μžˆλ‹€.

    λ¦¬νŒ©ν† λ§μ€ λ™μž‘μ„ λ³€κ²½ν•˜μ§€ μ•Šκ³  μ†Œν”„νŠΈμ›¨μ–΄ μž‘μ„± 방식을 λ³€κ²½ν•˜λŠ” κ²ƒμœΌλ‘œ 보톡 μœ λ‹›ν…ŒμŠ€νŠΈλ‘œ μ†Œν”„νŠΈμ›¨μ–΄κ°€ μ–΄λ–»κ²Œ μž‘μ„±λλŠ”μ§€ ν…ŒμŠ€νŠΈν•œλ‹€. λ‚΄λΆ€ ν…ŒμŠ€νŠΈν•˜λŠ” κ²ƒμž„. μž‘μ„± 방식을 λ³€κ²½ν•˜λ©΄, λ™μž‘μ΄ λ³€κ²½λ˜μ§€ μ•Šμ•„λ„ ν…ŒμŠ€νŠΈμ— μ‹€νŒ¨ν•  수 μžˆμŒμ„ μ˜λ―Έν•œλ‹€. λ”°λΌμ„œ, μ†Œν”„νŠΈμ›¨μ–΄κ°€ μ œλŒ€λ‘œ μž‘λ™ν•˜λ©΄ ν…ŒμŠ€νŠΈλ„ 톡과해야 ν•˜κΈ° λ•Œλ¬Έμ— 이런 점은 단점이 λœλ‹€.


πŸ”₯ κΈ°λŠ₯ ν…ŒμŠ€νŠΈ

  • μœ λ‹› ν…ŒμŠ€νŠΈμ™€λŠ” λ‹€λ₯Έ 사고방식을 가지고 μžˆλ‹€. ν…ŒμŠ€νŠΈν•˜λŠ” νŠΉμ • λ™μž‘μ΄λ‚˜ μœ μ € ν”Œλ‘œμš°μ™€ μ—°κ΄€λœ λͺ¨λ“  λ‹¨μœ„λ₯Ό ν¬ν•¨ν•œλ‹€.
  • μ‚¬μš©μžκ°€ μ†Œν”„νŠΈμ›¨μ–΄μ™€ μƒν˜Έ μž‘μš©ν•˜λŠ” 방식과 λ°€μ ‘ν•˜λ‹€. 즉, ν…ŒμŠ€νŠΈμ— ν†΅κ³Όν•˜λ©΄ μ‚¬μš©μžμ—κ²Œ λ¬Έμ œκ°€ μ—†κ³  μ‹€νŒ¨ν•˜λ©΄ λ¬Έμ œκ°€ 있음.
  • μ½”λ“œ μž‘μ„± 방식을 λ¦¬νŒ©ν† λ§ν•˜λ©΄ λ™μž‘μ΄ λ™μΌν•˜κ²Œ μœ μ§€λ˜λŠ” ν•œ ν…ŒμŠ€νŠΈλ„ ν†΅κ³Όν•˜κ²Œ λœλ‹€.

단점

  • μ‹€νŒ¨ν•œ ν…ŒμŠ€νŠΈλ₯Ό λ””λ²„κΉ…ν•˜κΈ° μ–΄λ ΅λ‹€. μ½”λ“œκ°€ ν…ŒμŠ€νŠΈμ™€ μœ λ‹› ν…ŒμŠ€νŠΈμ²˜λŸΌ λ°€μ ‘ν•˜κ²Œ μ—°κ²°λ˜μ–΄ μžˆμ§€ μ•Šμ•„μ„œ μ–΄λ–€ λΆ€λΆ„μ˜ μ½”λ“œκ°€ μ‹€νŒ¨μ˜ 원인인지 μ°ΎκΈ°κ°€ μ–΄λ ΅λ‹€.
  • μ „λ°˜μ μœΌλ‘œ RTL은 κΈ°λŠ₯ ν…ŒμŠ€νŠΈμ˜ μž₯점이 단점을 λ³΄μ™„ν•œλ‹€κ³  생각



πŸ“ TDD(ν…ŒμŠ€νŠΈ 주도 개발) vs BDD(행동 주도 개발)


BDDλž€

  • ν…ŒμŠ€νŒ… λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ‚¬μš©μžμ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‚¬μš© 방식 ν…ŒμŠ€νŠΈλ₯Ό ꢌμž₯ν•˜λŠ”λ°, μ΄λŠ” 행동을 ν…ŒμŠ€νŠΈ ν•˜λŠ” 것이닀.
  • 맀우 λͺ…ν™•ν•˜λ‹€. λ‹€μ–‘ν•œ μ—­ν•  κ°„μ˜ ν˜‘μ—…μ΄ ν•„μš” -> κ°œλ°œμžλ‚˜ QA, 사업 νŒŒνŠΈλ„ˆ λ“±
  • μ„œλ‘œ λ‹€λ₯Έ 그룹이 μƒν˜Έ μž‘μš©ν•˜λŠ” 방식에 κ΄€ν•œ ν”„λ‘œμ„ΈμŠ€λ„ μ •μ˜λ˜μ–΄ μžˆλ‹€.

참고자료
https://testing-library.com/docs/queries/about/#priority
https://www.w3.org/TR/wai-aria/#role_definitions

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.