import React from 'react';
export default function TestHeader({ isLogin, userId }: { isLogin: boolean; userId?: string }) {
return (
<div>
{isLogin ? (
<h1>{userId}님 환영합니다!</h1>
) : (
<h1>
로그인 해주세요! <button>로그인</button>
</h1>
)}
</div>
);
}
import { render, screen } from '@testing-library/react';
import TestHeader from './TestHeader';
test('isLogin이 true로 전달이 된 상태에서, userId가 잘 뜨는지', () => {
render(<TestHeader isLogin={true} userId='jke' />);
const textEl = screen.getByText(/jke님 환영합니다!/);
expect(textEl).toBeInTheDocument();
});
test('isLogin이 false일 때, 문구와 button이 정상 출력되는지 확인', () => {
render(<TestHeader isLogin={false} />);
const textEl = screen.getByText(/로그인 해주세요!/);
const btnEl = screen.getByRole('button');
screen.debug();
expect(textEl).toBeInTheDocument();
expect(btnEl).toBeInTheDocument();
expect(btnEl).toHaveTextContent('로그인');
});
import React, { useState } from 'react';
export default function TestCounter() {
const [count, setCount] = useState(0);
const onClickBtn = () => {
setCount(cur => cur + 1);
};
return <button onClick={onClickBtn}>현재 숫자: {count}</button>;
}
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import '@testing-library/jest-dom';
import TestCounter from './TestCounter';
test('버튼의 온클릭 함수 작동하는지', () => {
render(<TestCounter />);
const btn = screen.getByRole('button');
expect(btn).toHaveTextContent('현재 숫자: 0');
userEvent.click(btn);
expect(btn).toHaveTextContent('현재 숫자: 1');
});