๊ธฐ๋ฅ ์ ์์ฒญํ๊ฑฐ๋ ๋ฒ๊ทธ๋ฅผ๋ณด๊ณ ํ์๊ฒ ์ต๋๊น?
๋ฒ๊ทธ๋ฅผ๋ณด๊ณ ํ๊ณ ์ถ์ต๋๋ค.
ํ์ฌ ํ๋์ ๋ฌด์์
๋๊น?
ํ์ฌ ์ ํจํ ๊ธฐ๋ฅ ๊ตฌ์ฑ ์์๊ฐ 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
๊ธฐ๋ฅ์ ๊ตฌ์ฑ ์์์๋ 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๋ ๋ํ ์ฃผ์ ์ ๋ํด ๊ด๋ฒ์ํ๊ฒ ์๋๋ค.
์ด ๋ฌธ์ ๋ ๋ฒ๊ทธ / ๊ธฐ๋ฅ ์์ฒญ์ด ์๋ ์ฌ์ฉ ์ง๋ฌธ์ด๋ฏ๋ก ์ข ๋ฃํฉ๋๋ค.