Tailwind CSS 마스터
Utility-first CSS, 반응형 디자인, 커스터마이징
학습 항목
이미지 로딩 중...
Tailwind CSS 테스트 전략 완벽 가이드
Tailwind CSS로 작성된 컴포넌트를 테스트하는 방법을 초급자도 쉽게 이해할 수 있도록 설명합니다. Jest와 Testing Library를 활용한 실전 테스트 전략을 다룹니다.
들어가며
이 글에서는 Tailwind CSS 테스트 전략 완벽 가이드에 대해 상세히 알아보겠습니다. 총 8가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- 기본_컴포넌트_렌더링_테스트
- CSS_클래스_존재_확인_테스트
- 조건부_스타일링_테스트
- 반응형_클래스_테스트
- 다크모드_클래스_테스트
- 동적_클래스_생성_테스트
- 스냅샷_테스트
- 접근성과_스타일_통합_테스트
1. 기본_컴포넌트_렌더링_테스트
개요
Tailwind 클래스가 적용된 컴포넌트가 올바르게 렌더링되는지 확인하는 기본 테스트입니다.
코드 예제
import { render, screen } from '@testing-library/react';
test('버튼이 올바르게 렌더링된다', () => {
render(<button className="bg-blue-500 text-white">클릭</button>);
const button = screen.getByText('클릭');
expect(button).toBeInTheDocument();
});
설명
Testing Library의 render 함수로 컴포넌트를 렌더링하고, screen.getByText로 요소를 찾아서 존재 여부를 확인합니다.
2. CSS_클래스_존재_확인_테스트
개요
특정 Tailwind 클래스가 요소에 정확히 적용되었는지 검증하는 테스트입니다.
코드 예제
test('버튼에 올바른 클래스가 적용된다', () => {
render(<button className="bg-blue-500 hover:bg-blue-600">버튼</button>);
const button = screen.getByRole('button');
expect(button).toHaveClass('bg-blue-500', 'hover:bg-blue-600');
});
설명
getByRole로 버튼 요소를 찾고, toHaveClass 매처로 특정 Tailwind 클래스가 적용되었는지 확인합니다.
3. 조건부_스타일링_테스트
개요
props에 따라 다른 Tailwind 클래스가 적용되는지 테스트합니다.
코드 예제
const Button = ({ variant }) => (
<button className={variant === 'primary' ? 'bg-blue-500' : 'bg-gray-500'}>
버튼
</button>
);
test('variant에 따라 스타일이 변경된다', () => {
const { rerender } = render(<Button variant="primary" />);
expect(screen.getByRole('button')).toHaveClass('bg-blue-500');
rerender(<Button variant="secondary" />);
expect(screen.getByRole('button')).toHaveClass('bg-gray-500');
});
설명
rerender를 사용해 props를 변경하고, 조건에 따라 다른 클래스가 적용되는지 확인합니다.
4. 반응형_클래스_테스트
개요
반응형 Tailwind 클래스(md:, lg: 등)가 올바르게 적용되었는지 확인합니다.
코드 예제
test('반응형 클래스가 적용된다', () => {
render(
<div className="text-sm md:text-base lg:text-lg">
반응형 텍스트
</div>
);
const element = screen.getByText('반응형 텍스트');
expect(element).toHaveClass('text-sm', 'md:text-base', 'lg:text-lg');
});
설명
여러 반응형 클래스를 한 번에 검증하여 breakpoint별 스타일이 정의되었는지 확인합니다.
5. 다크모드_클래스_테스트
개요
다크모드 전환 시 적절한 Tailwind 클래스가 적용되는지 테스트합니다.
코드 예제
test('다크모드 클래스가 적용된다', () => {
render(
<div className="bg-white dark:bg-gray-900">
콘텐츠
</div>
);
const element = screen.getByText('콘텐츠');
expect(element).toHaveClass('bg-white', 'dark:bg-gray-900');
});
설명
dark: 접두사가 있는 클래스를 검증하여 다크모드 지원이 구현되었는지 확인합니다.
6. 동적_클래스_생성_테스트
개요
템플릿 리터럴이나 clsx로 동적으로 생성된 클래스를 테스트합니다.
코드 예제
import clsx from 'clsx';
const Button = ({ isActive }) => (
<button className={clsx('px-4 py-2', isActive && 'bg-blue-500')}>
버튼
</button>
);
test('활성 상태에 따라 클래스가 추가된다', () => {
const { rerender } = render(<Button isActive={false} />);
expect(screen.getByRole('button')).not.toHaveClass('bg-blue-500');
rerender(<Button isActive={true} />);
expect(screen.getByRole('button')).toHaveClass('bg-blue-500');
});
설명
clsx 라이브러리로 조건부 클래스를 생성하고, 상태에 따라 클래스가 추가/제거되는지 확인합니다.
7. 스냅샷_테스트
개요
컴포넌트의 전체 구조와 클래스가 변경되지 않았는지 스냅샷으로 확인합니다.
코드 예제
test('컴포넌트 스냅샷이 일치한다', () => {
const { container } = render(
<button className="bg-blue-500 text-white px-4 py-2 rounded">
제출
</button>
);
expect(container.firstChild).toMatchSnapshot();
});
설명
toMatchSnapshot으로 컴포넌트의 HTML 구조와 클래스를 저장하여, 의도하지 않은 변경을 감지합니다.
8. 접근성과_스타일_통합_테스트
개요
Tailwind 스타일과 함께 접근성 속성도 올바르게 적용되었는지 확인합니다.
코드 예제
test('접근성과 스타일이 함께 적용된다', () => {
render(
<button
className="bg-blue-500 focus:ring-2 focus:ring-blue-300"
aria-label="메뉴 열기"
>
메뉴
</button>
);
const button = screen.getByLabelText('메뉴 열기');
expect(button).toHaveClass('focus:ring-2', 'focus:ring-blue-300');
});
설명
aria-label로 접근성을 보장하고, focus 관련 Tailwind 클래스도 함께 테스트하여 UX를 검증합니다.
마치며
이번 글에서는 Tailwind CSS 테스트 전략 완벽 가이드에 대해 알아보았습니다. 총 8가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#React #TailwindCSS #Testing #Jest #TestingLibrary