2. React Testing Library
React ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉ์ ์ ์ฅ์ ๊ฐ๊น๊ฒ ํ ์คํธํ ์ ์๋ ๋๊ตฌ.
when, then์ ๊ฐ๋ ์ด ์๋ค.
context('with two numbers', () => {
it('returns sum of two numbers', () => {
//when
const result = add(2)
//then
expect(result).toBe(2);
});
});์๋ ReactDom..createRoot() ์์ผ๋ก ๋์ ๋ง๋ค์ด์ ๋ ๋ํด์คฌ๋ค๋ฉด
๊ทธ๋ฐ๊ฑฐ ์์ด ํธํ๊ฒ ํ ์คํ ํ ์ ์๋ render๋ฅผ ์ ๊ณตํ๋ค.
// TextField.tsx
import { useRef } from 'react';
type TextFiledProps={
label:string
placeholder: string
text:string
setFilterText:(value:string) => void
}
export default function TextField({
label, placeholder, text, setFilterText,
}:TextFiledProps) {
const id = useRef(`input=${Math.random()}`);
const handleChange = (e:React.ChangeEvent<HTMLInputElement>) => {
const { value } = e.target;
setFilterText(value);
};
return (
<div>
<label htmlFor="input2">
{label}
</label>
<input
id="input2"
type="text"
/>
</div>
);
}label text๊ฐ Search์ธ ์ธํ์ ์ก๋๋ฐ,
label์ htmlFor์ input์ id๊ฐ ๊ฐ์์ผ ํ๋ค. ๊ทธ๋์ผ ๋์ด ์ฐ๊ฒฐ๋ Element๋ก ์ธ์ํ๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด getByLabelText๋ก ์ฐพ์ง ๋ชปํจ.
์์ ํ ์ผ์นํ์ง ์์๋ get์ผ๋ก ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด ์ ๊ท ํํ์์ ์ด์ฉํ๋ค.
์๋์ฒ๋ผ getํด์จ element๋ฅผ ํ ์คํธ ํ ์๋ ์๋ค.
๋ณ์์ฒ๋ฆฌ ํด์ค ์ ์๋ค
event
์ฌ๊ธฐ๊น์ง ์ํ์์ ๋ณด๋ฉด handleChange ๋ด์์ setFilter ๋ฑ ์๋ฌด๋ฐ ํจ์๋ฅผ ๋ฃ์ด๋
ํ ์คํธ๋ฅผ ์์ฑํ์ง ์์์ ์๋ฌด๋ฐ ์ด์์ด ์๋ค.
์ด๊ฒ๋ ์ก์์ฃผ๊ณ ์ถ๋ค.
setText๊ฐ ๋ถ๋ ธ๋์ง ํ์ธํ๊ณ ์ถ์ด
jest.fn ๋ชฉํน
์ด๊ฒ๋ณด๋ค ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ํ๋ค.
setText๊ฐ ๋ถ๋ ธ๋์ง, ์ํ๋ ๊ฐ์ผ๋ก ๋ฐ๊พธ๊ฒ ํ๋์ง๊น์ง ํ
์คํธํ๊ณ ์ถ์ด
setText๊ฐ call๋๋์ง ๋ฐ๋ก ํ์ธํ ์ ์๋ค.
context ํ์ฉ
์ค๋ณต๋๋ render ๋ถ๋ถ์ ๋นผ์ค๋ค
mock clear
์ฌ๊ธฐ์ it('renders elements')์
context๋ฅผ ์ด์ฉํ ๋ถ๋ถ ๋ ๊ตฐ๋ฐ์์ ๊ฐ์ ๋ฐ๋ก
setText ๋ชฉ์ ์ฌ์ฉํ๋๋ฐ
์ด๋์๋ ์ฝ ํ๊ธฐ๋ง ํ๋ฉด ์ฝ ๋๊ฑฐ.. ๊ทธ๋ฌ๋ฉด ์๋ผ์
๋งค ํ ์คํธ๋ง๋ค ์ด๊ธฐํ ํด์ค์ผ ํ๋ค.
์๋์ฒ๋ผ ์ ๋ฆฌํ ์ ์๋ค.
context ๋ด๋ถ์์ ๋๋ฌ๋ด๊ณ ์ถ์ผ๋ฉด ๊ทธ๋ฅ ๋๋ฌ๋ด๋ ์ข๋ค.
๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ Extract Functionํ๊ณ ,
fireEvent ๋ฑ์ ํตํด ์ธํฐ๋์
๋ง ๊ฒ์ฆํ๋ค.
์ธ๋ถ ์์กด์ฑ์ด ํฐ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ฉด ํด๋น ๋ถ๋ถ๋ง ๊ฐ์ง๋ก ๊ตฌํํ ์ ์๋ค
express ์๋ฒ๋ฅผ ์คํ์ํค์ง ์๊ณ mock์ ํ์ฉํด ํ ์คํธํ ์ ์๋ค.
์๋์ฒ๋ผ ๋ฐ๋ก ๋นผ์ ๋ชฉ๊ด๋ฆฌ๋ฅผ ํ ์ ์๋ค.
hooks Mock์ ์์ ๋ฐ๋ก ๋บ ์ ์๋ค
jest.fn์์ด () => fixtures.products ๋ง ์จ์ค๋ ๊ฐ๋ฅ.
๊ทธ๋ ์ง๋ง ์จ์ฃผ๋ฉด ๊ฐ์ง๋ผ๋ ์ฌ์ค์ด ๋ ๋ช ํํ๊ณ
ํธ์ถ์ด ๋๋์ง ํ์ธํ๋ ๋ฑ์ test๋ฅผ ๋ ํ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ถ์ด๋ ํธ์ ์ถ์ฒ.
์ ์ ์ฑ์ด ์ปค์ง๋ฉด์ ํ๋์ฉ ๊ฐ์ง ๊ตฌํ์ผ๋ก ํ๊ธฐ ์ด๋ ค์ธ ๋๊ฐ ์๋ค.
์ด๋ด๋ MSW๋ฑ์ ๋์์ ๊ณ ๋ คํด๋ณผ ์ ์๋ค. ๋ค์ ์ฃผ์ ๋ก ๋์ด๊ฐ ๋ณด์.
Last updated