queryByText, findByText, getByText์ ์ฐจ์ด์
getByText, findByText, queryByText๋ ๋ชจ๋ react-testing-library ํจํค์ง์์ ์ ๊ณตํ๋ ํจ์๋ก, ํน์ ํ ์คํธ๋ฅผ ๊ฐ์ง ์์๋ฅผ ์ฐพ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ ํจ์๋ ์ฝ๊ฐ ๋ค๋ฅธ ๋์๊ณผ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- getByText: ๋๊ธฐ์ ์ผ๋ก ์์๋ฅผ ์ฐพ๋ ํจ์์
๋๋ค. ํน์ ํ
์คํธ๋ฅผ ๊ฐ์ง ์์๋ฅผ ์ฐพ์ผ๋ฉด ํด๋น ์์๋ฅผ ๋ฐํํ๊ณ , ์์๋ฅผ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ์๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค. ์ฃผ๋ก ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ํ์ ํน์ ์์๋ฅผ ์ฆ์ ์ฐพ์์ผ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ง์ฝ ์์๊ฐ ์์ ๊ฒฝ์ฐ ํ
์คํธ๊ฐ ์คํจํฉ๋๋ค.
import { render, screen } from '@testing-library/react'; test('ํน์ ํ ์คํธ๊ฐ ํฌํจ๋ ์์๋ฅผ ์ฐพ๊ธฐ', () => { render(<MyComponent />); const element = screen.getByText('ํน์ ํ ์คํธ'); expect(element).toBeInTheDocument(); });
- findByText: ๋น๋๊ธฐ์ ์ผ๋ก ์์๋ฅผ ์ฐพ๋ ํจ์์
๋๋ค. ํน์ ํ
์คํธ๋ฅผ ๊ฐ์ง ์์๋ฅผ ์ฐพ์ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ฉฐ, ์์๋ฅผ ์ฐพ์ผ๋ฉด ํด๋น ์์๋ฅผ ๋ฐํํฉ๋๋ค. ์ด ํจ์๋ Promise๋ฅผ ๋ฐํํ๋ฏ๋ก **await๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ์ ์ผ๋ก ๋๊ธฐ**ํด์ผ ํฉ๋๋ค. ๋ง์ฝ ์์๊ฐ ๋ฐ๊ฒฌ๋์ง ์์ ๊ฒฝ์ฐ์๋ ํ์์์์ด ๋ฐ์ํฉ๋๋ค.
import { render, screen } from '@testing-library/react'; test('ํน์ ํ ์คํธ๊ฐ ํฌํจ๋ ์์๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์ฐพ๊ธฐ', async () => { render(<MyComponent />); const element = await screen.findByText('ํน์ ํ ์คํธ'); expect(element).toBeInTheDocument(); });
- queryByText: ๋๊ธฐ์ ์ผ๋ก ์์๋ฅผ ์ฐพ๋ ํจ์์ด๋ฉฐ, getByText์ ๋ฌ๋ฆฌ ์์๋ฅผ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ null์ ๋ฐํํฉ๋๋ค. ์ค๋ฅ๋ฅผ ๋ฐ์์ํค์ง ์๊ธฐ ๋๋ฌธ์ ์กฐ๊ฑด๋ฌธ ๋ฑ์ผ๋ก ์์์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ์์๊ฐ ์์ ๊ฒฝ์ฐ ํ
์คํธ๊ฐ ์คํจํ์ง ์์ต๋๋ค.
import { render, screen } from '@testing-library/react'; test('ํน์ ํ ์คํธ๊ฐ ํฌํจ๋ ์์๋ฅผ ์ฐพ๊ธฐ', () => { render(<MyComponent />); const element = screen.queryByText('ํน์ ํ ์คํธ'); expect(element).toBeInTheDocument(); // element๊ฐ null์ด ์๋์ด์ผ ํจ });
๋ฐ๋ผ์, getByText์ ๋๊ธฐ์ ์ผ๋ก ์์๋ฅผ ์ฐพ๊ณ , findByText๋ ๋น๋๊ธฐ์ ์ผ๋ก ์์๋ฅผ ์ฐพ์์ผ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค. queryByText๋ ์์์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ์ฉ๋๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์ ํํ ํจ์๋ ํ ์คํธ ์๋๋ฆฌ์ค ๋ฐ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์ ์ ํ๊ฒ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋๊ธ