서버 데이터 변환을 순수 함수로 분리해 경계값을 검증합니다.
Server Component 자체보다 업무 DTO 변환과 권한 정책을 순수 함수로 분리하면 빠른 단위 테스트가 가능합니다. 실제 프로젝트에서는 Vitest나 Jest에서 실행합니다.
빈 데이터, 권한 없음, 잘못된 값과 정상값을 포함합니다.
렌더 테스트는 사용자에게 보이는 role과 text를 중심으로 검사합니다.
DB mock 호출 횟수만 검사하면 실제 업무 결과 회귀를 놓칩니다.
로컬 프로젝트에서 확인해보세요done이 total보다 큰 입력을 거절하는 테스트를 추가하세요.
function toSummary(course) {
if (course.total <= 0) throw new RangeError("total");
return { title: course.title, percent: Math.round((course.done / course.total) * 100) };
}
const cases = [
{
name: "50%",
run: () => toSummary({ title: "Next", done: 5, total: 10 }).percent === 50,
},
{
name: "0 거절",
run: () => {
try {
toSummary({ title: "X", done: 0, total: 0 });
return false;
} catch {
return true;
}
},
},
];
export default function Page() {
return (
<main>
<h1>서버 계약 테스트</h1>
<ul>
{cases.map((c) => (
<li key={c.name}>
{c.run() ? "PASS" : "FAIL"} {c.name}
</li>
))}
</ul>
</main>
);
}