import { render, screen } from '@testing-library/react';
import Title from './Title';
import { BookStoreThemeProvider } from '../../../context/themeContext';
describe('Title component Test', () => {
it('check render', () => {
render(
<BookStoreThemeProvider>
<Title size='large'>Title</Title>
</BookStoreThemeProvider>,
);
expect(screen.getByText('Title')).toBeInTheDocument();
});
it('size props application', () => {
const { container } = render(
<BookStoreThemeProvider>
<Title size='large'>제목</Title>
</BookStoreThemeProvider>,
);
expect(container?.firstChild).toHaveStyle({ fontSize: '2rem' });
});
});
it('check render', () => {
render(
<BookStoreThemeProvider>
<Title size='large'>Title</Title>
</BookStoreThemeProvider>,
);
expect(screen.getByText('Title')).toBeInTheDocument();
});
it: 하나의 테스트 단위를 정의
render 호출
screen.getByText
화면에서 텍스트가 "Title"인 요소를 검색
expect(...).toBeInTheDocument()는 요소가 DOM에 존재하는지 확인
- toBeInTheDocument는 Jest의 Matcher 중 하나
- @testing-library/jest-dom에서 제공하는 DOM 요소 검증을 위한 메서드
- 주로 특정 요소가 DOM에 존재하는지 확인할 때 사용
- 테스트 대상이 DOM 안에 존재하는지 확인하여, 존재 여부를 검증
- 성공 조건: 요소가 DOM에 존재하면 테스트가 통과
- 실패 조건: 요소가 DOM에 없으면 테스트가 실패
it('size props application', () => {
const { container } = render(
<BookStoreThemeProvider>
<Title size='large'>제목</Title>
</BookStoreThemeProvider>,
);
expect(container?.firstChild).toHaveStyle({ fontSize: '2rem' });
});
import { render, screen } from '@testing-library/react';
import Title from './Title';
import { BookStoreThemeProvider } from '../../../context/themeContext';
describe('Title component Test', () => {
it('check render', () => {
render(
<BookStoreThemeProvider>
<Title size='large'>Title</Title>
</BookStoreThemeProvider>,
);
expect(screen.getByText('Title')).toBeInTheDocument();
});
it('size props application', () => {
const { container } = render(
<BookStoreThemeProvider>
<Title size='large'>제목</Title>
</BookStoreThemeProvider>,
);
expect(container?.firstChild).toHaveStyle({ fontSize: '2rem' });
});
});
it('check render', () => {
render(
<BookStoreThemeProvider>
<InputText placeholder='여기에 입력하세요' />
</BookStoreThemeProvider>,
);
expect(screen.getByPlaceholderText('여기에 입력하세요')).toBeInTheDocument();
});
it('forwardRef Test', () => {
const ref = React.createRef<HTMLInputElement>();
render(
<BookStoreThemeProvider>
<InputText placeholder='여기에 입력하세요' ref={ref} />
</BookStoreThemeProvider>,
);
expect(ref.current).toBeInstanceOf(HTMLInputElement);
});
ref 객체를 생성
ref.current를 통해 InputText의 실제 DOM 노드에 접근 가능
import { render, screen } from '@testing-library/react';
import Button from './Button';
import { BookStoreThemeProvider } from '../../../context/themeContext';
describe('Button component Test', () => {
it('check render', () => {
render(
<BookStoreThemeProvider>
<Button size='large' schema='primary'>
Button Test
</Button>
</BookStoreThemeProvider>,
);
expect(screen.getByText('Button Test')).toBeInTheDocument();
});
it('size props application', () => {
const { container } = render(
<BookStoreThemeProvider>
<Button size='large' schema='primary'>
Button Test
</Button>
</BookStoreThemeProvider>,
);
expect(screen.getByRole('button')).toHaveStyle({
fontSize: '1.5rem',
});
});
});
it('check render', () => {
render(
<BookStoreThemeProvider>
<Button size='large' schema='primary'>Button Test</Button>
</BookStoreThemeProvider>,
);
expect(screen.getByText('Button Test')).toBeInTheDocument();
});
Button 컴포넌트 렌더링
getByText로 확인
it('size props application', () => {
const { container } = render(
<BookStoreThemeProvider>
<Button size='large' schema='primary'>Button Test</Button>
</BookStoreThemeProvider>,
);
expect(screen.getByRole('button')).toHaveStyle({
fontSize: '1.5rem',
});
});
getByRole('button')
toHaveStyle로 스타일 확인