効果的な反応コンポーネントテストが重要です。 React Testing Library(RTL)はこのプロセスを簡素化し、ユーザーインタラクションテストを強調します。 この記事では、より効率的で保守可能な単体テストを作成するための5つの高度なRTLテクニックを紹介します。
render()
メリット:screen
テストの読みやすさの強化。
レンダリングされた画面要素との相互作用を明示的に示しています使用:
このアプローチは、より大きなテストスイート全体で一貫性を維持します
<code class="language-javascript">const { getByText } = render(); expect(getByText(/click me/i)).toBeInTheDocument();</code>
クエリを使用します。これにより、要素レンダリング後にのみアサーションが実行されます
findBy
タイミングの問題のために、フレーク状のテストを排除します。非同期コンポーネントのより堅牢なテストを作成します
findBy
getBy
あるいは、
3。 正確なターゲティングの場合は
<code class="language-javascript">// Component asynchronously fetches and displays a username render(<UserProfile />); const userName = await screen.findByText(/john doe/i); expect(userName).toBeInTheDocument();</code>
ユーティリティは曖昧な一致を防ぎます。
waitFor
findBy
メリット:getBy
waitFor
<code class="language-javascript">render(<UserProfile />); await waitFor(() => { expect(screen.getByText(/john doe/i)).toBeInTheDocument(); });</code>
within
例:
within
4。 現実的な相互作用の場合は
より正確なイベントシミュレーション。
<code class="language-javascript">render( <fieldset name="Personal Information"> <legend>Personal Information</legend> <label htmlFor="personal-name">Name</label> </fieldset> ); const nameLabel = within(screen.getByRole('group')).getByLabelText(/Name/i); expect(nameLabel).toBeInTheDocument();</code>
テキスト入力のような複雑な相互作用を処理します。
userEvent
このアプローチにより、テストは実際のユーザーの動作を正確に反映しています
fireEvent
userEvent
例:
<code class="language-javascript">const { getByText } = render(); expect(getByText(/click me/i)).toBeInTheDocument();</code>
<code class="language-javascript">render(); expect(screen.getByText(/click me/i)).toBeInTheDocument();</code>
.toHaveTextContent()
クリーンアップ:.toHaveAttribute()
rtlがクリーンアップを処理している間に、cleanup()
ターゲットを絞ったテスト実行およびIDE統合カバレッジレポートのためにプラグインを使用してJestを使用することを検討してください。
afterEach
以上があなたのユニットテストを改善するためのReact Testingライブラリのリックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。