์ค๋ ์ท
์ปดํฌ๋ํธ์ DOM ๊ตฌ์กฐ๋ฅผ ์ง๋ ฌํํ์ฌ ๊ธฐ๋กํ๊ฑฐ๋, ์ด๋ฏธ์ง ํํ๋ก ๊ธฐ๋กํ๋๊ฒ
JsDOM ์ค๋ ์ท ํ ์คํธ๋ DOM ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋กํ๊ณ ์ด์ ์ ๊ธฐ๋กํ ์ค๋ ์ท๊ณผ ๋น๊ตํ์ฌ ๊ฒ์ฆํ๋ ํ ์คํธ๋ค.
๊ณผ์
- ๋์ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๋ค.
- ์ปดํฌ๋ํธ์ DOM์ ์ง๋ ฌํํด ์ค๋ ์ท์ผ๋ก ๊ธฐ๋กํ๋ค.
- ๊ธฐ์กด์ ์ค๋ ์ท๊ณผ ์๋ก์ด ์ค๋ ์ท์ ๋น๊ตํ๋ค. (๋น๊ตํ ์ค๋ ์ท์ด ์๋ค๋ฉด ํ์ฌ ์ค๋ ์ท์ ๊ธฐ๋กํ์ฌ ๋ค์ ์ค๋ ์ท๊ณผ ๋น๊ต.)
- ๊ธฐ์กด ์ค๋ ์ท๊ณผ ํ์ฌ ์ค๋ ์ท์ด ๋์ผํ ๊ฒฝ์ฐ ํ ์คํธ๋ ํต๊ณผํ๋ค.
- ๊ธฐ์กด ์ค๋ ์ท๊ณผ ํ์ฌ ์ค๋ ์ท์ด ๋ค๋ฅด๋ค๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ๋ค.
- ์๋ํ ๋ณ๊ฒฝ์ผ ๊ฒฝ์ฐ ์ค๋ ์ท์ ์ ๋ฐ์ดํธ(๋ค์ ๋น๊ต ๊ธฐ์ค์ด ๋๋๋ก)ํ๋ค.
UI ์ปดํฌ๋ํธ ํ ์คํธ
it('pageTitle ์ค๋
์ท ํ
์คํธ(toMatchInlineSnapshot)', async () => {
const { container } = await render(<PageTitle />);
expect(container).toMatchInlineSnapshot(`
<div>
<h1
class="MuiTypography-root MuiTypography-h4 css-1lnl64-MuiTypography-root"
>
์ํ ๋ฆฌ์คํธ
</h1>
<div
style="position: fixed; z-index: 9999; top: 16px; left: 16px; right: 16px; bottom: 16px; pointer-events: none;"
/>
</div>
`);
});
const PageTitle = () => (
<Typography variant="h4" component="h1" padding="20px 0">
์ํ ๋ฆฌ์คํธ
</Typography>
);
์ด๋ ๊ฒ ํด๋น ์ปดํฌ๋ํธ์ ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋๋ก ๋น๊ตํด์ ์ผ์นํ๋ฉด ํต๊ณผํ๋ ๋ฐฉ์.
toMatchSnapshot() ํจ์๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋น๊ต ๊ธฐ์ค์ด ๋๋ ์ฝ๋๊ฐ ๋ณ๋ ํ์ผ๋ก ๋ถ๋ฆฌ๋์ด ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ํ
์คํธ ์ฝ๋๊ฐ ๊ธธ์ด์ง์ง ์๋๋ค.
์ผ๋ฐ ํจ์
it('๋จ์ผ ์ธ์๋ก ์ ๋ฌ๋ ํค์ ๊ฐ์ ๊ฐ์ฒด์ ๋ด์ ๋ฐํํ๋ค', () => {
const obj = {
a: 'A',
b: { c: 'C' },
d: null,
};
expect(pick(obj, 'a')).toEqual({ a: 'A' });
});
it('๋จ์ผ ์ธ์๋ก ์ ๋ฌ๋ ํค์ ๊ฐ์ ๊ฐ์ฒด์ ๋ด์ ๋ฐํํ๋ค(snapshots)', () => {
const obj = {
a: 'A',
b: { c: 'C' },
d: null,
};
expect(pick(obj, 'a')).toMatchInlineSnapshot(`
{
"a": "A",
}
`);
๋น์ฐํ ์ง๋ ฌํ๋ ๋ฌธ์์ด๊ณผ ๋น๊ตํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ UI ์ปดํฌ๋ํธ ๋ฟ ์๋๋ผ ์ผ๋ฐ์ ์ธ ์ ํธํจ์์ ๊ฒฐ๊ณผ๋ ์ด๋ ๊ฒ ์ค๋ ์ท ํ ์คํธ๋ฅผ ํตํด ๊ฒ์ฆํ ์ ์๋ค.
์์ toEqual ๋ก ๊ฒ์ฆํ๋๊ฒ๊ณผ ๋๊ฐ์๋ฐ ๊ตณ์ด ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋? ๋ง์ฝ ๊ฐ์ฒด ์์ ์ฌ๋ฌ ์์ฑ๋ค์ ๋น๊ตํ๊ณ ์ถ๋ค๋ฉด ์ค๋
์ท ํ
์คํธ๋ฅผ ํตํด ํ๋ฒ์ ๊ฒ์ฆํ๋๊ฒ ํจ์ฌ ๊ฐ๋จํ๋ค.
