
src/components/Counter.tsx 파일을 생성합니다.export default function Counter() {
return (
<div>
{/* 아직은 아무 내용도 없는 빈 껍데기입니다 */}
</div>
);
}Counter.test.tsx)로 돌아가서, 빨간 줄이 떴던 import 구문을 정상적으로 인식할 수 있게 됩니다.TestingLibraryElementError: Unable to find an element with the text: /현재 숫자: 0/
export default function Counter() {
return (
<div>
<p>현재 숫자: 0</p>
<button type="button">+</button>
</div>
);
}import { useState } from 'react';
export default function Counter() {
// [상태] 숫자를 기억하는 메모리 상자(state)를 만듭니다. 초기값은 0입니다.
const [count, setCount] = useState(0);
const handleClick = () => {
// [동작] 기존 값에 1을 더해줍니다.
setCount(prev => prev + 1);
};
return (
<div>
{/* 고정된 숫자 0 대신, 변하는 값 count를 보여줍니다. */}
<p>현재 숫자: {count}</p>
{/* 버튼을 누르면 handleClick 함수가 실행됩니다. */}
<button type="button" onClick={handleClick}>
+
</button>
</div>
);
}npm test
PASS src/components/Counter.test.tsx
Counter 컴포넌트 동작 테스트
✓ 초기값은 0이며, + 버튼을 누르면 숫자가 1 증가한다 (50 ms)useState(0)으로 인해 화면에 "현재 숫자: 0"이 렌더링 되었고, getByText가 이를 찾아냈습니다.<button>+<button> 태그가 있어 getByRole('button', { name: '+' })가 성공했습니다.user.click()이 실행되었을 때 onClick 이벤트가 발생하여 setCount가 실행되었습니다.git clone https://github.com/PROMLEE/my-tdd-app.git
cd my-tdd-app
git checkout part4다음 시간에는5편. 컴포넌트 리팩토링과 테스트 유지를 통해, 테스트 코드가 있는 상태에서 코드를 깔끔하게 다듬는 방법을 알아보겠습니다.