๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
TestCode

[Test Code] queryByText, findByText, getByText

by DevIseo 2023. 6. 29.

queryByText, findByText, getByText์˜ ์ฐจ์ด์ 

getByText, findByText, queryByText๋Š” ๋ชจ๋‘ react-testing-library ํŒจํ‚ค์ง€์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜๋กœ, ํŠน์ • ํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ง„ ์š”์†Œ๋ฅผ ์ฐพ๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ ํ•จ์ˆ˜๋Š” ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ๋™์ž‘๊ณผ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

  1. getByText: ๋™๊ธฐ์ ์œผ๋กœ ์š”์†Œ๋ฅผ ์ฐพ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ํŠน์ • ํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ง„ ์š”์†Œ๋ฅผ ์ฐพ์œผ๋ฉด ํ•ด๋‹น ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์š”์†Œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์ฃผ๋กœ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋œ ํ›„์— ํŠน์ • ์š”์†Œ๋ฅผ ์ฆ‰์‹œ ์ฐพ์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์š”์†Œ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
    import { render, screen } from '@testing-library/react';
    
    test('ํŠน์ • ํ…์ŠคํŠธ๊ฐ€ ํฌํ•จ๋œ ์š”์†Œ๋ฅผ ์ฐพ๊ธฐ', () => {
      render(<MyComponent />);
    
      const element = screen.getByText('ํŠน์ • ํ…์ŠคํŠธ');
      expect(element).toBeInTheDocument();
    });
    
    
     
  2. findByText: ๋น„๋™๊ธฐ์ ์œผ๋กœ ์š”์†Œ๋ฅผ ์ฐพ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ํŠน์ • ํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ง„ ์š”์†Œ๋ฅผ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ, ์š”์†Œ๋ฅผ ์ฐพ์œผ๋ฉด ํ•ด๋‹น ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” Promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ **await๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋Œ€๊ธฐ**ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์š”์†Œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š” ํƒ€์ž„์•„์›ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    import { render, screen } from '@testing-library/react';
    
    test('ํŠน์ • ํ…์ŠคํŠธ๊ฐ€ ํฌํ•จ๋œ ์š”์†Œ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฐพ๊ธฐ', async () => {
      render(<MyComponent />);
    
      const element = await screen.findByText('ํŠน์ • ํ…์ŠคํŠธ');
      expect(element).toBeInTheDocument();
    });
    
    
  3. 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๋Š” ์š”์†Œ์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ํƒํ•œ ํ•จ์ˆ˜๋Š” ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ฐ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€