// import dependencies
import React from 'react'
// import API mocking utilities from Mock Service Worker
import {rest} from 'msw'
import {setupServer} from 'msw/node'
// import react-testing methods
import {render, fireEvent, waitFor, screen} from '@testing-library/react'
// add custom jest matchers from jest-dom
import '@testing-library/jest-dom'
// the component to test
import Fetch from '../fetch'
// assert that the alert message is correct using
// toHaveTextContent, a custom matcher from jest-dom.
expect(screen.getByRole('alert')).toHaveTextContent('Oops, failed to fetch!')
// assert that the button is not disabled using
// toBeDisabled, a custom matcher from jest-dom.
expect(screen.getByRole('button')).not.toBeDisabled()
ユニットテスト
Jest
参考
使い方
例
describe
はテストスイートtest
はテストケースexpect(value)
はテスト対象を指定します。toBe
はテストマッチャーという他の基本事項については基本的に上記参考の - Facebook製のJavaScriptテストツール「Jest」の逆引き使用例 -Qiita にすべて解説されている
スナップショットテスト
Jest
参考
Integrationテスト
react-testing-library
参考
概要
インストール
create-react-app
を使用している場合、React Testing Libraryは標準で含まれているnpm install --save-dev @testing-library/react
使い方
describe
,test
describe,testについてはJestと同様
describe
はテストスイートtest
はテストケースImports
Mock
Arrange
render
メソッドrender
関数は、任意のJSXを受け取ってレンダリングします。その後、テスト内でReactコンポーネントにアクセスできるようになる。(RTLのscreen
を利用)debug
関数を利用できるrenderメソッドの補足(Screen vs Renderクエリ)
...
const { getByText } = render(
expect(getByText('Foo')).toBeInTheDocument()
beforeEach
,afterEach
beforeEach
で一度だけrender
メソッドを呼び出すのがよいafterEach
でcleanupを行うかafterEach
グローバルをサポートしており、テスト環境に注入されている場合、自動的に行われます(mocha、Jest、Jasmineなど)。Act,Assertion の準備
要素の選択
screen
オブジェクト関数で要素の選択を始めることができます。getByText
は要素が取得できなかった時はエラーをスローします。getByText
関数は正規表現も利用できます。検索のタイプ
検索バリエーション
getBy
queryBy
queryBy
を使い、それ以外の場合は標準でgetBy
を使うimport App from './App';
describe('App', () => { test('renders App component', () => { render( );
}); });
Assert
通常の全てのアサーション関数はJest由来
React Testing LibraryはこのAPIを
toBeInTheDocument
のような独自のアサーション関数で拡張しますcreate-react-app
を使っていれば最初からセットアップされています。toBeDisabled
toBeEnabled
toBeEmpty
toBeEmptyDOMElement
toBeInTheDocument
toBeInvalid
toBeRequired
toBeValid
toBeVisible
toContainElement
toContainHTML
toHaveAttribute
toHaveClass
toHaveFocus
toHaveFormValues
toHaveStyle
toHaveTextContent
toHaveValue
toHaveDisplayValue
toBeChecked
toBePartiallyChecked
toHaveDescription
E2Eテスト
cypress