Greeting.js
import { useState } from "react";
function Greeting() {
const [changedText, setChangedText] = useState(false);
const changeTextHandler = () => {
setChangedText(true);
};
return (
<div>
<h2>Hello</h2>
{changedText ? <p>바뀌었다!</p> : <p>만나서 반갑다!</p>}
<button onClick={changeTextHandler}>Change Text!</button>
</div>
);
}
export { Greeting };
위 컴포넌트를 테스트 할 간단한 테스트 코드를 작성해봅시다.
테스트 주제는 아래와 같습니다.
여기서 우리는 3A
라는 개념으로 테스트 코드를 작성합니다.
테스트 데이터와 조건들등 테스트 환경에 대한 배열입니다.
테스트를 실행하는 로직입니다. 함수를 실행하는 형태입니다.
실행결과를 도달해야할 결과와 비교를 실행합니다.
Greeting.test.js
import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { Greeting } from "./Greeting";
describe("Greeting component", () => {
test("renders : 안녕! : 해당 텍스트가 있는가", () => {
// Arrange
render(<Greeting />);
//Act
// ...nothing
//Assert
// 가상화면에서 해당 요소를 가지고 있는 Element를 반환합니다.
const helloElement = screen.getByText("Hello", { exact: false });
// Document에 이 요소가 있는지 확인합니다.
expect(helloElement).toBeInTheDocument();
});
test("renders : 만나서 반갑다! : 버튼을 누르지 않았을 경우 해당 텍스트가 있는가", () => {
render(<Greeting />);
const outputElement = screen.getByText("만나서 반갑다!", { exact: false });
expect(outputElement).toBeInTheDocument();
});
test("renders : 바뀌었다! : 버튼을 눌렀을 경우 해당 텍스트가 있는가?", () => {
render(<Greeting />);
//Act
const buttonElement = screen.getByRole("button");
userEvent.click(buttonElement);
//Assert
const outputElement = screen.getByText("바뀌었다!", { exact: false });
expect(outputElement).toBeInTheDocument();
});
test("Not renders : 만나서 반갑다! : 버튼을 눌렀을 경우 해당 텍스트가 없는가", () => {
render(<Greeting />);
const buttonElement = screen.getByRole("button");
userEvent.click(buttonElement);
const outputElement = screen.queryByText("만나서 반갑다!", {
exact: false,
});
expect(outputElement).toBeNull();
});
});