(λ²ˆμ—­) React Testing Library

Ethan Lee
3 min readJan 1, 2023

--

πŸ’‘ React Testing Library κ³΅μ‹λ¬Έμ„œμ˜ μ†Œκ°œ 뢀뢄을 λ°œμ·Œν•˜μ—¬ λ²ˆμ—­ν•œ κΈ€μž…λ‹ˆλ‹€. https://testing-library.com/docs/react-testing-library/intro

React Testing Library λŠ” DOM Testing Library λ₯Ό 기반으둜 ν•˜κ³  있으며, APIλ₯Ό μΆ”κ°€ν•˜μ—¬ React μ»΄ν¬λ„ŒνŠΈμ—μ„œ λ™μž‘ν•©λ‹ˆλ‹€.

Create React App 을 톡해 μƒμ„±λœ ν”„λ‘œμ νŠΈλŠ” React Testing Library λ₯Ό 기본적으둜 μ§€μ›ν•©λ‹ˆλ‹€. λ§Œμ•½ 그렇지 μ•Šμ€ 상황이라면 npm 을 톡해 λ‹€μŒκ³Ό 같이 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

# npm
npm install --save-dev @testing-library/react

# yarn
yarn add --dev @testing-library/react

문제

React μ»΄ν¬λ„ŒνŠΈμ— λŒ€ν•œ μœ μ§€λ³΄μˆ˜ κ°€λŠ₯ν•œ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κ³ μž ν•  λ•Œ, 이 λͺ©ν‘œμ˜ μΌν™˜μœΌλ‘œ ν…ŒμŠ€νŠΈκ°€ μ»΄ν¬λ„ŒνŠΈμ˜ κ΅¬ν˜„μ— λŒ€ν•œ μ„ΈλΆ€ 정보λ₯Ό ν¬ν•¨ν•˜λŠ” 것을 ν”Όν•˜κ³  ν…ŒμŠ€νŠΈκ°€ μ˜λ„ν•œ μ‹ λ’°λ₯Ό μ£ΌλŠ”λ° μ§‘μ€‘ν•˜κΈΈ μ›ν•©λ‹ˆλ‹€. 이에 λŒ€ν•œ μΌλΆ€λ‘œμ„œ μ»΄ν¬λ„ŒνŠΈ λ¦¬νŒ©ν† λ§(κΈ°λŠ₯을 μ œμ™Έν•œ κ΅¬ν˜„μ— λŒ€ν•œ λ³€κ²½)이 ν…ŒμŠ€νŠΈλ₯Ό 깨뜨리고 νŒ€μ„ 느리게 λ§Œλ“€μ§€ μ•Šλ„λ‘ κΈ΄ μ‹œκ°„ λ™μ•ˆ μœ μ§€λ³΄μˆ˜ κ°€λŠ₯ν•œ ν…ŒμŠ€νŠΈλ² μ΄μŠ€λ₯Ό μ›ν•©λ‹ˆλ‹€.

ν•΄κ²°

React Testing Library λŠ” React μ»΄ν¬λ„ŒνŠΈλ₯Ό ν…ŒμŠ€νŠΈν•˜λŠ” 맀우 κ°€λ²Όμš΄ μ†”λ£¨μ…˜μž…λ‹ˆλ‹€. 더 λ‚˜μ€ ν…ŒμŠ€νŠΈ 관행을 μž₯λ €ν•˜λŠ” λ°©μ‹μœΌλ‘œ react-dom κ³Ό react-dom/test-utils μœ„μ— κ°€λ²Όμš΄ μœ ν‹Έλ¦¬ν‹° κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. μ£Όμš” κ°€μ΄λ“œ 원칙은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

ν…ŒμŠ€νŠΈκ°€ μ†Œν”„νŠΈμ›¨μ–΄ μ‚¬μš©λ°©μ‹κ³Ό μœ μ‚¬ν•  수둝, 더 λ§Žμ€ μ‹ λ’°λ₯Ό 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ λžœλ”λœ React μ»΄ν¬λ„ŒνŠΈ μΈμŠ€ν„΄μŠ€λ₯Ό μ²˜λ¦¬ν•˜λŠ” λŒ€μ‹  ν…ŒμŠ€νŠΈλŠ” μ‹€μ œ DOM λ…Έλ“œμ—μ„œ μž‘λ™ν•  κ²ƒμž…λ‹ˆλ‹€. 이 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ œκ³΅ν•˜λŠ” μœ ν‹Έλ¦¬ν‹°λ“€μ€ μ‚¬μš©μž 행동과 λ™μΌν•œ λ°©μ‹μœΌλ‘œ DOM을 μΏΌλ¦¬ν•˜λŠ” 것을 κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€. μ‚¬μš©μžλ“€μ΄ ν•˜λŠ” κ²ƒμ²˜λŸΌ 라벨 λ¬Έμžμ—΄μ„ 톡해 form μš”μ†Œλ₯Ό μ°Ύκ±°λ‚˜, λ¬Έμžμ—΄μ„ 톡해 λ§ν¬λ‚˜ λ²„νŠΌμ„ μ°ΎμŠ΅λ‹ˆλ‹€. λ˜ν•œ ν…μŠ€νŠΈ 컨텐츠와 λ ˆμ΄λΈ”μ΄ μ˜λ―Έκ°€ μ—†κ±°λ‚˜ μ‹€μš©μ μ΄μ§€ μ•Šμ€ μš”μ†Œμ— λŒ€ν•œ β€œescape hatchβ€λ‘œμ„œ data-testidλ₯Ό 톡해 μš”μ†Œλ₯Ό μ°ΎλŠ” ꢌμž₯된 방법을 μ œκ³΅ν•©λ‹ˆλ‹€.

이 λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 접근성을 높이고 μ‚¬μš©μžκ°€ μ›ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬μ„±μš”μ†Œλ₯Ό μ‚¬μš©ν•˜λŠ” 방식에 κ°€κΉŒμš΄ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•  수 μžˆλ„λ‘ ν•˜μ—¬ ν…ŒμŠ€νŠΈλ₯Ό 톡해 μ‹€μ œ μ‚¬μš©μžκ°€ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‚¬μš©ν•  λ–„ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μž‘λ™ν•  κ²ƒμ΄λΌλŠ” 확신을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

이 λΌμ΄λΈŒλŸ¬λ¦¬λŠ” Enzyme 을 λŒ€μ²΄ν•©λ‹ˆλ‹€. Enzyme 자체λ₯Ό μ‚¬μš©ν•˜μ—¬ μ΄λŸ¬ν•œ 지침을 λ”°λ₯Ό μˆ˜λŠ” μžˆκ² μ§€λ§Œ, Enzyme 이 μ œκ³΅ν•˜λŠ” λͺ¨λ“  μΆ”κ°€ μœ ν‹Έλ¦¬ν‹°(κ΅¬ν˜„ μ„ΈλΆ€ 사항 ν…ŒμŠ€νŠΈλ₯Ό μš©μ΄ν•˜κ²Œ ν•˜λŠ” μœ ν‹Έλ¦¬ν‹°) λ•Œλ¬Έμ— 이λ₯Ό μ μš©ν•˜λŠ” 것이 더 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

이 λΌμ΄λΈŒλŸ¬λ¦¬μ— ν•΄λ‹Ήλ˜μ§€ μ•ŠλŠ” 것

  1. ν…ŒμŠ€νŠΈ λŸ¬λ„ˆ ν˜Ήμ€ ν”„λ ˆμž„μ›Œν¬κ°€ μ•„λ‹™λ‹ˆλ‹€.
  2. ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬λ₯Ό ν•œμ •ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. (κΈ°λ³Έ μ„€μ •μœΌλ‘œ Jestλ₯Ό ꢌμž₯ν•˜μ§€λ§Œ, λͺ¨λ“  λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μž‘λ™ν•©λ‹ˆλ‹€)

NOTE: 이 λΌμ΄λΈŒλŸ¬λ¦¬λŠ” DOM Testing Library μœ„μ— λ§Œλ“€μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€.

νŠœν† λ¦¬μ–Ό

이 라이브러리 μ†Œκ°œλ₯Ό λ‹΄κ³  μžˆλŠ” What is React Testing Library? λΉ„λ””μ˜€λ₯Ό 보면 μ’‹μŠ΅λ‹ˆλ‹€. λ˜ν•œ λ‹€μŒμ˜ νŠœν† λ¦¬μ–Όλ„ λ†“μΉ˜μ§€ λ§ˆμ„Έμš”.

--

--

Ethan Lee
Ethan Lee

Written by Ethan Lee

Stop begging, create value

No responses yet