React: TestUtils.renderIntoDocument๋Š” ์œ ํšจํ•œ ๊ธฐ๋Šฅ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ „๋‹ฌ๋˜๋ฉด 'null'์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2019๋…„ 04์›” 10์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: facebook/react

๊ธฐ๋Šฅ ์„ ์š”์ฒญํ•˜๊ฑฐ๋‚˜ ๋ฒ„๊ทธ๋ฅผ๋ณด๊ณ  ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
๋ฒ„๊ทธ๋ฅผ๋ณด๊ณ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ํ–‰๋™์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
ํ˜„์žฌ ์œ ํšจํ•œ ๊ธฐ๋Šฅ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ TestUtils.renderIntoDocument์— ์ „๋‹ฌ๋˜๋ฉด null์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ๋ชจ
์ด ๋™์ž‘์€ ์ƒŒ๋“œ ๋ฐ•์Šค์—์„œ ์žฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค : https://codesandbox.io/s/1zpvll4j24

์ค€๋น„๋œ ์ƒ˜ํ”Œ ๊ตฌ์„ฑ ์š”์†Œ์˜ TestUtils.renderIntoDocument ์ถœ๋ ฅ์„ ๋ณด๋ ค๋ฉด ์ฝ˜์†”์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
SFC์™€ FC๋ฅผ ๋ชจ๋‘ ์ถฉ์กฑํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ž˜ํ•‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

const FCCounter = () => {
  const [count, setCount] = useState(0);

  return (
    <div>
      <div>{count}</div>
      <button onClick={() => setCount(count + 1)}>+1</button>
    </div>
  );
};

TestUtils.renderIntoDocument(
  <div>
    <FCCounter />
  </div>
);

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  • ๊ธฐ๋Šฅ์  ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.
  • ์ตœ์•…์˜ ๊ฒฝ์šฐ-์˜ค๋ฅ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์˜ ์˜ํ–ฅ์„๋ฐ›๋Š” React ๋ฒ„์ „์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
React ๋ฒ„์ „ : 16.8.6

Test Utils Question

๋ชจ๋“  4 ๋Œ“๊ธ€

๊ธฐ๋Šฅ์  ๊ตฌ์„ฑ ์š”์†Œ์—๋Š” instances ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋ฌด์—‡์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

TestUtils.renderIntoDocument(<FCCounter/>)

๋Œ๋ ค ์ฃผ๋‹ค?

๋˜ํ•œ, ๋‹น์‹ ์ดํ•˜๋ ค๋Š” ์ผ์„ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์„ค๋ช… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? forwardRef / useImperativeHandle (https://reactjs.org/docs/hooks-reference.html#useimperativehandle)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ถ€ '๋ฉ”์†Œ๋“œ'์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ œ๊ฐ€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ „ํ˜€ ํ…Œ์ŠคํŠธํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ž˜์‹ ๊ตฌ์„ฑ ์š”์†Œ๋กœ TestUtils.renderIntoDocument ๋ฅผ ํ˜ธ์ถœ ํ•œ ํ›„ state , props ์— ๋„๋‹ฌํ•˜๊ณ  setState ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์กฐ์ž‘ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ, TestUtils.renderIntoDocument ๋ฅผ ๋ฐ˜ํ™˜ ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ ํ•œ ๊ฒƒ์€ state , props ๋ฐ setState ๋ฅผ) ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ผ๋ถ€ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๊ตฌํ˜„ ๋œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ๋ชฉํ‘œ๋Š” ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ณ€๊ฒฝ๋œ ์ƒํƒœ๊ฐ€ ํ…Œ์ŠคํŠธ์—์„œ ์˜ˆ์ƒ ํ•œ ์ƒํƒœ์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ์˜ ๊ฒฝ์šฐ ์ „์ œ ์กฐ๊ฑด์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ์š”์†Œ๋Š”์žˆ๋Š” ๊ทธ๋Œ€๋กœ ํ…Œ์ŠคํŠธํ•ด์•ผํ•˜๋ฉฐ ํ…Œ์ŠคํŠธ ๋ชฉ์ ์œผ๋กœ ํŠน๋ณ„ํžˆ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๋„๋ก ๋ณ€๊ฒฝํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ forwardRef/useImperativeHandle ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ ์š”์†Œ ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ์˜ต์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

@DeividasBakanas ํ•จ์ˆ˜ ๊ตฌ์„ฑ ์š”์†Œ์—๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฒ„ํŠผ์„ ํŠธ๋ฆฌ๊ฑฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ์ด๊ฒƒ์€ TestUtils.renderIntoDocument ์—์„œ ๋ฐ˜ํ™˜ ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ช…๋ น ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋‚˜์€ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค (ํด๋ž˜์Šค ๊ตฌ์„ฑ ์š”์†Œ์˜ ๊ฒฝ์šฐ).

@trueadm์ด ์–ธ๊ธ‰ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๊ตฌ์„ฑ ์š”์†Œ ์ž์ฒด์˜ ๊ตฌํ˜„ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฉฐ props / events๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—…๋ฐ์ดํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ณ  ๊ตฌ์„ฑ ์š”์†Œ ์ถœ๋ ฅ์— ๋Œ€ํ•œ ์–ด์„ค ์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. react-testing-library https://github.com/kentcdodds/react-testing-library ์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”์ฒœํ•˜์—ฌ ์ข€ ๋” ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kent๋Š” ๋˜ํ•œ ์ฃผ์ œ์— ๋Œ€ํ•ด ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์”๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๋ฒ„๊ทธ / ๊ธฐ๋Šฅ ์š”์ฒญ์ด ์•„๋‹Œ ์‚ฌ์šฉ ์งˆ๋ฌธ์ด๋ฏ€๋กœ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰