サイトアイコン 上尾市のWEBプログラマーによるブログ

「Reactハンズオンラーニング」の感想・備忘録6

「Reactハンズオンラーニング」の感想・備忘録5の続き

テスト

10.6.2 要素の検索

import {render} from '@testing-library/react'
// 〜省略〜
const {queryByText} = render(<Sample/>)
const h1 = queryByText(/abcd/)  
expect(h1).toHaveTextContent("abcd")

クエリ関数

※ xxxにはTextやTestIdが入る(getByText、queryAllByTestIdなど)

const {getAllByText} = render(<Sample/>)
const h3 = getAllByText(/@gmail.com/)
expect(h3.length).toBeGreaterThan(0)

10.6.3 イベントのテスト

import {render, fireEvent} from '@testing-library/react'
import Reducer from "./Reducer"

test("checkbox event test", () => {
  const {getByLabelText, getByTestId} = render(<Reducer/>)
  const checkbox = getByLabelText("OFF")
  fireEvent.click(checkbox)
  expect(checkbox.checked).toEqual(true)
  
  const button = getByTestId("toggle")
  fireEvent.click(button)
  expect(checkbox.checked).toEqual(false)
})
import {useReducer} from 'react'

function Reducer() {
  const [checked, toggle] = useReducer(checked =>{
    return !checked
  }, false)
  return (
    <div>
      <h2>Reducer.js</h2>
      <label><input type="checkbox" checked={checked} onChange={toggle}/>{checked ? "ON" : "OFF"}</label>
      <button type="button" onClick={toggle} data-testid="toggle">toggle</button>
    </div>
  );
}

export default Reducer
モバイルバージョンを終了