Snapshot

Snapshot Test๋ž€?

Jest์˜ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋กœ ๋ Œ๋”๋ง๋œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์˜ˆ์ƒํ•œ๋Œ€๋กœ ๋ Œ๋”๋ง๋˜๋Š”์ง€ UI ๊ด€์ ์—์„œ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•

์ •์ ์ธ UI ์ „์ฒด๋ฅผ ๊ฒ€์‚ฌํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

์ •ํ™•ํ•˜๊ฒŒ๋Š” ๋ Œ๋”๋ง๋œ DOM Tree๋ฅผ ๋น„๊ตํ•˜๊ณ  ์ฐจ์ด๊ฐ€ ์žˆ์œผ๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๊ณ  ๊ฐ™์œผ๋ฉด ํ†ต๊ณผ๋œ๋‹ค.

๋งŒ์•ฝ ์Šค๋ƒ…์ƒท ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜์—ฌ UI๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ฐ์ง€ํ•œ ๊ฒฝ์šฐ, ์ด๋Š” ์˜๋„ํ•˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ ์ ˆํ•œ ๊ฒฝ์šฐ์—๋Š” ๊ธฐ์กด ๋ณด๊ด€๋œ ์Šค๋ƒ…์ƒท์„ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ํ…Œ์ŠคํŠธ ์‹คํ–‰์ฐฝ ํ„ฐ๋ฏธ๋„์—์„œ u ๋ฅผ ๋ˆ„๋ฅด๋ฉด ๊ฐ„๋‹จํžˆ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋กœ์ง ํ…Œ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ์˜ค๋กœ์ง€ UI ์™ธํ˜• ํ…Œ์ŠคํŠธ์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ๋“ค๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์ž.

Snapshot? UI์˜ ์ƒํƒœ๋ฅผ ์Šคํฌ๋ฆฐ์ƒท ์ฐ๋“ฏ์ด ์บก์ฒ˜ํ•˜์—ฌ UI ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ๊ตฌ์กฐ๋กœ ๋ณด๊ด€ํ•œ๋‹ค.

ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ์ด์ „์— ์ €์žฅ๋œ ์Šค๋ƒ…์ƒท๊ณผ ํ˜„์žฌ ํ…Œ์ŠคํŠธ ํ›„ ์ƒ๊ธด ์ƒˆ๋กœ์šด ์Šค๋ƒ…์ƒท์„ ๋น„๊ตํ•˜์—ฌ UI๊ฐ€ ์ž˜ ๋ณด์ด๋Š”์ง€, ๋ณ€๊ฒฝ๋œ๊ฒŒ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค.

์žฅ์ 

  • ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์ด ๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ

  • ์ฝ”๋“œ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ UI ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋น ๋ฅด๊ฒŒ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ 

  • UI์˜ ์ •์ ์ธ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ, ๋™์ ์ธ UI์— ๋Œ€ํ•ด์„œ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค.

  • ์Šค๋ƒ…์ƒท์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ๊ด€๋ฆฌํ•˜๊ธฐ ์–ด๋ ต๋‹ค. โ†’ ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„์ด ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

__snapshots__

์Šค๋ƒ…์ƒท ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ __snapshots__ ํด๋”์— ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ๋ณด๊ด€ํ•œ๋‹ค.

react-testing-library

Usage

import {render, screen, waitForElementToBeRemoved} from '@testing-library/react';

descrivbe('Component', () => {
  it('renders correctly', () => {
    // asFragment โ†’ React ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ง๋ ฌํ™”
    const {asFragment} = render(<Component />);
    
    expect(asFragment()).toMatchSnapshot();
  })
})

react-test-renderer

Install

npm i -D react-test-renderer @types/react-test-renderer

Usage

import reneder from 'react-test-renderer';

descrivbe('Component', () => {
  it('renders correctly', () => {
    const component = renderer.create(<Component />);
  
    expect(component.toJSON()).toMatchSnapshot();
  })
})

Last updated