ํ ์คํธ ํ๊ฒฝ๊ณผ ๋งค์ฒ
ํ ์คํธ ํ๋ ์์ํฌ : ํ์คํฌ ๋ฌ๋, ์ด์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํ๋ฌ๊ทธ์ธ ๋ฑ ํ ์คํธ ์คํ ๋ฐ ๊ฒ์ฆ์ ํ์ํ ํ๊ฒฝ์ ์ ๊ณตํ๋ ๋๊ตฌ (Vitest, Cypress ๋ฑ)
Vitest ์ค์
vite.config.jsํ์ผ์ test ํ๋์ ์ ์ํ๊ฑฐ๋, ์ฝ๋๋์ด ๋ง๋ค๋ฉด vitest.config.js๋ผ๋ ํ์ผ์ ๋ง๋ค๊ธฐ๋ ํ๋ค.
//vite.config.js
export default defineConfig({
plugins: [react(), eslint({ exclude: ['/virtual:/**', 'node_modules/**'] })],
test: {
globals: true,
environment: 'jsdom',
setupFiles: './src/utils/test/setupTests.js',
},
resolve: {
alias: [{ find: '@', replacement: path.resolve(__dirname, 'src') }],
},
});
JSDOM
ํ
์คํธ๋ Node.js ํ๊ฒฝ์์ ์คํ๋๋๋ฐ, ๋ธ๋ผ์ฐ์ ์์ด HTML์ ๊ตฌ์กฐ๋ฅผ ํ์ธํ ์ ์๊ฒ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
screen.debug()ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฌผ์ HTML ํ๊ทธ๋ค๋ก ๋ํ๋ด์ค๋ค.
<body>
<div>
<input
class="text-input my-class"
placeholder="ํ
์คํธ๋ฅผ ์
๋ ฅํด ์ฃผ์ธ์."
type="text"
value=""
/>
</div>
</body>
it() ํจ์
ํ ์คํธ๊ฐ ํต๊ณผํ๊ธฐ ์ํ ์กฐ๊ฑด์ ๊ธฐ์ ํ์ฌ ๊ฒ์ฆ์ ์คํํ๋ค. it ํจ์๋ ๊ฐ๋จํ test ํจ์์ alias. test ํจ์์์ ๊ธฐ๋ฅ์์ ์ฐจ์ด๋ ์๋ค.
describe()
๊ธฐ๋ณธ์ ์ผ๋ก itํจ์๋ก ์ ์๋ ํ ์คํธ ํ์ผ์ '๋ฃจํธ'์ด๊ธฐ ๋๋ฌธ์ ์ต์์ ์ปจํ ์คํธ์์ ํ ์คํธ๊ฐ ์คํ๋๋ค. describe ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ it ํจ์๋ค์ ๊ทธ๋ฃน์ง์ ์ ์๋ค.
๋งค์ฒ Matcher
๊ธฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ API ์งํฉ. (์์ expect().toHaveClass())
