개발/React

React Testing Library μ‚¬μš©ν•˜κΈ° (from Scratch) - 1

밍(Ming) 🐈‍⬛ 2022. 4. 29. 16:59
728x90
λ°˜μ‘ν˜•

ν…ŒμŠ€νŠΈμ½”λ“œλŠ” μ™œ μ€‘μš”ν•œκ°€μš”? 

ν…ŒμŠ€νŠΈμ½”λ“œλŠ” μ½”λ“œλ₯Ό λ¦¬νŒ©ν† λ§ ν•  λ•Œ, ν˜Ήμ€ λ¦¬νŒ©ν† λ§μ„ ν•˜μ§€ μ•Šμ•„λ„ μ€‘μš”ν•œ μ‘΄μž¬μž…λ‹ˆλ‹€. λ¦¬νŒ©ν† λ§μ„ ν•  λ•Œμ—λŠ” ν…ŒμŠ€νŠΈμ½”λ“œλ₯Ό μ§œλ‘κ³  λ¦¬νŒ©ν† λ§μ„ ν•˜λ©΄ ν•˜κΈ° μ „κ³Ό ν›„μ˜ κ²°κ³Όκ°€ λ™μΌν•˜λ‹€λŠ” 것을 보μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 외에도 μƒˆλ‘œμš΄ κΈ°λŠ₯이 μΆ”κ°€λ˜κ±°λ‚˜ κΈ°μ‘΄ κΈ°λŠ₯이 λ³€κ²½λ˜μ—ˆμ„ λ•Œ λ‹€λ₯Έ κΈ°λŠ₯듀이 μ œλŒ€λ‘œ λ™μž‘ν•˜μ§€ μ•Šμ„ μˆ˜λ„ 있기 λ•Œλ¬Έμ— ν…ŒμŠ€νŠΈμ½”λ“œλ₯Ό λ§Œλ“€μ–΄λ‘λ©΄ μœ μ§€λ³΄μˆ˜ν•  λ•Œ μ˜ˆμƒμΉ˜ λͺ» ν•œ μ—λŸ¬λ“€μ„ 미리 λ°©μ§€ν•  수 κ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‹€μ–‘ν•œ κ°œλ°œμ„œμ μ—μ„œλ„ 이 μ€‘μš”μ„±μ„ ꡉμž₯히 κ°•μ‘°ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 

 

 

React Testing LibraryλŠ” 세뢀적인 κ΅¬ν˜„μ‚¬ν•­λ³΄λ‹€λŠ” μ‹€μ œ μ‚¬μš©μž κ²½ν—˜κ³Ό μœ μ‚¬ν•œ λ°©μ‹μ˜ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κΈ°λ₯Ό κΆŒκ³ ν•©λ‹ˆλ‹€. μ˜ˆλ₯Ό λ“€μ–΄μ„œ div νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜λŠ”μ§€ 보닀 div ν…Œκ·Έμ˜ λ©”μ„Έμ§€κ°€ λΈŒλΌμš°μ €μ— 잘 λ…ΈμΆœμ΄ λ˜λŠ”μ§€, button이 잘 λœ¨λŠ” μ§€ 등을 νŒŒμ•…ν•˜λŠ” 것을 더 μ€‘μš”ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 

λ¦¬μ•‘νŠΈ ν…ŒμŠ€νŠΈμ½”λ“œλ₯Ό 짜기 μœ„ν•΄μ„œ 검색을 ν•˜λ‹€λ³΄λ©΄ jest λΌλŠ” 단어도 많이 λ³΄μ‹œκ²Œ 될 κ²ƒμž…λ‹ˆλ‹€. μ—­μ‹œλ‚˜ ν…ŒμŠ€νŠΈμ½”λ“œλ₯Ό 짜기 μœ„ν•œ λ„κ΅¬μž…λ‹ˆλ‹€. λ‹€λ₯Έ 점이 μžˆλ‹€λ©΄ React Testing Libraryκ°€ jestλ₯Ό ν¬ν•¨ν•˜κ³  μžˆλ‹€κ³  μƒκ°ν•˜λ©΄ 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€. jest λŠ” 자체적인 κΈ°λŠ₯ ν…ŒμŠ€νŠΈλ₯Ό ν•  수 μžˆμ§€λ§Œ React μ»΄ν¬λ„ŒνŠΈλ₯Ό λ Œλ”λ§ν•˜λŠ” ν…ŒμŠ€νŠΈλ₯Ό ν•˜κΈ° μœ„ν•΄μ„œλŠ” λͺ‡ κ°€μ§€ 좔가적인 κΈ°λŠ₯듀이 ν•„μš”ν•©λ‹ˆλ‹€. 

 

λ¦¬μ•‘νŠΈ κΈ°λ³Έ νŽ˜μ΄μ§€λ‘œ μ•Œμ•„λ³΄λŠ” ν…ŒμŠ€νŠΈμ½”λ“œ

제일 처음 λ¦¬μ•‘νŠΈ ν”„λ‘œμ νŠΈλ₯Ό μƒμ„±ν•˜λ©΄ React λ‘œκ³ κ°€ λΉ™κΈ€λΉ™κΈ€ λ„λŠ” νŽ˜μ΄μ§€κ°€ λœΉλ‹ˆλ‹€. 

그리고 μƒμ„±λœ 폴더와 νŒŒμΌμ„ 찬찬히 λ³΄μ‹œλ©΄ APpp.test.js λΌλŠ” 파일이 μžˆμŠ΅λ‹ˆλ‹€. 

κ·Έ νŒŒμΌμ„ μ˜€ν”ˆν•΄λ³΄μ‹œλ©΄ λ„€, μ—¬λŸ¬λΆ„μ€ ν…ŒμŠ€νŠΈ μ½”λ“œκ°€ μ–΄λ–»κ²Œ μƒκ²ΌλŠ”μ§€ λ³΄μ‹œκ²Œ λ©λ‹ˆλ‹€. 

 

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 react/i);
 expect(linkElement).toBeInTheDocument();
}

λΉ™κΈ€λΉ™κΈ€ 돌고 μžˆλŠ” λ¦¬μ•‘νŠΈ 둜고 밑에 μžλ¦¬μž‘μ€ 링크에 λŒ€ν•œ ν…ŒμŠ€νŠΈμž…λ‹ˆλ‹€.

App.js νŒŒμΌμ— μžˆλŠ” a tag에 μ ν˜€μžˆλŠ” Learn React λΌλŠ” ν…μŠ€νŠΈλ₯Ό λ”΄ λ‹¨μ–΄λ‘œ λ³€κ²½ν•˜μ‹œκ³  ν…ŒμŠ€νŠΈλ₯Ό λŒλ €λ΄…μ‹œλ‹€ 

ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό 돌리기 μœ„ν•΄μ„œλŠ” 터미널을 μ˜€ν”ˆν•˜μ‹œκ³ μš” 

npm test or yarn test λ₯Ό μ μ–΄μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€. 그러면 μ—¬λŸ¬ μ˜΅μ…˜μ΄ λœ¨λŠ”λ°μš”, aλ₯Ό νƒ€μ΄ν•‘ν•˜μ‹œλ©΄ 전체 μ½”λ“œλ₯Ό ν™•μΈν•©λ‹ˆλ‹€. 

그러면 failed 라고 뜰 κ²λ‹ˆλ‹€. 

 

 

About Queries

ν…ŒμŠ€νŠΈμ½”λ“œλ₯Ό 짜기 μœ„ν•œ λ‹€μ–‘ν•œ μ½”λ“œκ°€ 정말 λ§ŽμŠ΅λ‹ˆλ‹€. Testing Libarary μΏΌλ¦¬λ³΄λŸ¬κ°€κΈ°(https://testing-library.com/docs/queries/about)

ν•„μˆ˜μ μœΌλ‘œ test, render 등이 μ“°μ΄λŠ”λ°μš”, testλŠ” method, render은 ν…ŒμŠ€νŠΈν•΄μ•Όν•  νŠΉμ • μ»΄ν¬λ„ŒνŠΈλ₯Ό λ Œλ”λ§ν•˜λŠ”λ° μ“°μž…λ‹ˆλ‹€. screen은 쿼리λ₯Ό μ‚¬μš©ν•΄μ„œ νŠΉμ • DOM을 κ°€μ Έμ˜€κΈ° μœ„ν•œκ²ƒμ΄λΌκ³  μ΄ν•΄ν•˜λ©΄ 쒋을 것 κ°™μ•„μš”. container둜 쓰이기도 ν•©λ‹ˆλ‹€. screen 뒀에 λΆ™λŠ” getByText 같은 것이 μΏΌλ¦¬μž…λ‹ˆλ‹€. 

 

 

 

 

 

 

 

 

ν•™μŠ΅μžλ£Œ 

β—Ύ https://tecoble.techcourse.co.kr/post/2021-10-22-react-testing-library/

β—Ύ https://testing-library.com/docs/queries/about

 

 

 

 

 

728x90