ホームページ >ウェブフロントエンド >jsチュートリアル >反応コンポーネントをテストするガイド
デモサンプルコードをダウンロードして実行すると、次のようなページが表示されます。
テスト可能なコンポーネントを書き込み
反応では、良いアプローチはコンポーネントの階層から始めることです。個々のコンポーネントを構築するときに、単一の責任の原則が思い浮かびます。 Reactコンポーネントは、オブジェクトの構成と関係を使用しますたとえば、大猿のリストについては、このアプローチがあります。
優れた類人猿リストには、データが多くの類人猿の行があることを見てみましょう。 Reactコンポーネントはこの組成データモデルを利用しており、テスト可能です。
FilterableGreatApeList |_ GreatApeSearchBar |_ GreatApeList |_ GreatApeRow反応コンポーネントでは、継承を使用して再利用可能なコンポーネントを構築しないようにします。古典的なオブジェクト指向プログラミングの背景から来る場合は、これに留意してください。 Reactコンポーネントは事前に子供を知らない。祖先の長いチェーンから降りるコンポーネントのテストは悪夢になる可能性があります。
自分でフィルター可能なGreatapelistを探索させていただきます。これは、ここで興味深い2つの個別のコンポーネントを備えたReactコンポーネントです。それに付属する単位テストもお気軽に探索してください。 たとえば、テスト可能なgreatapeSearchbarを構築するには、これを行います
このコンポーネントには、ラベルが付いたチェックボックスがあり、クリックイベントをワイヤします。このアプローチはすでにあなたにとってあまりにも馴染みがあるかもしれません、それはとても良いことです。
反応すると、テスト可能なコンポーネントが無料で、すぐに箱から出てくることに注意してください。ここには特別なことは何もありません。イベントハンドラー、JSX、レンダリング方法。
階層の次の反応コンポーネントはgreatapelistであり、次のようになります。Greataperowコンポーネントを備えており、オブジェクト構成を使用しているReactコンポーネントです。これは、職場でのReactの最も強力な組成モデルです。再利用可能でありながらテスト可能なコンポーネントを構築するときの継承の欠如に注意してください。
<span>class GreatApeSearchBar extends Component { </span> <span>constructor(props) { </span> <span>super(props); </span> <span>this.handleShowExtantOnlyChange = this.handleShowExtantOnlyChange.bind(this); </span> <span>} </span> <span>handleShowExtantOnlyChange(e) { </span> <span>this.props.onShowExtantOnlyInput(e.target.checked); </span> <span>} </span> <span>render() { </span> <span>return( </span> <span><span><span><form</span>></span> </span><span> <span><span><input</span> </span></span><span> <span>id<span>="GreatApeSearchBar-showExtantOnly"</span> </span></span><span> <span>type<span>="checkbox"</span> </span></span><span> <span>checked<span>={this.props.showExtantOnly}</span> </span></span><span> <span>onChange<span>={this.handleShowExtantOnlyChange}</span> </span></span><span> <span>/></span> </span><span> </span><span> <span><span><label</span> htmlFor<span>="GreatApeSearchBar-showExtantOnly"</span>></span>Only show extant species<span><span></label</span>></span> </span><span> <span><span></form</span>></span> </span> <span>); </span> <span>} </span><span>} </span>プログラミングでは、オブジェクト構成は、データ駆動型要素を可能にするデザインパターンです。別の言い方を考えると、greatapelistには多くのgreataperowオブジェクトがあります。デザインを駆動するのは、UIコンポーネント間のこの関係です。 Reactコンポーネントにはこの考え方が組み込まれています。UI要素を見るこの方法では、いくつかの素晴らしいユニットテストを書くことができます。
ここで、チェックボックスから来るthis.props.showextantonlyフラグを確認します。このshowextantonlyプロパティは、greatapeSearchbarのイベントハンドラーを通じて設定されます。
ユニットテストでは、他のコンポーネントに依存するユニットテストの反応コンポーネントをどのようにしますか?互いに絡み合っているコンポーネントはどうですか?これらは、すぐにテストするときに留意すべき素晴らしい質問です。反応コンポーネントには、ロックを解除できる秘密がまだある場合があります今のところ、偉大な類人猿のデータを収容しているgreataperowを見てみましょう:
Reactコンポーネントを使用すると、各UI要素を単一の懸念に焦点を合わせて分離することが実用的です。これは、単体テストに関して重要な利点があります。このデザインパターンに固執している限り、ユニットテストを作成するのはシームレスになります。
<span>class GreatApeList extends Component { </span> <span>render() { </span> <span>let rows = []; </span> <span>this.props.apes.forEach((ape) => { </span> <span>if (!this.props.showExtantOnly) { </span> rows<span>.push(<span><span><GreatApeRow</span> key<span>={ape.name}</span> ape<span>={ape}</span> /></span>); </span> <span>return; </span> <span>} </span> <span>if (ape.isExtant) { </span> rows<span>.push(<span><span><GreatApeRow</span> key<span>={ape.name}</span> ape<span>={ape}</span> /></span>); </span> <span>} </span> <span>}); </span> <span>return ( </span> <span><span><span><div</span>></span> </span><span> {rows} </span><span> <span><span></div</span>></span> </span> <span>); </span> <span>} </span><span>} </span>テストユーティリティ
反応コンポーネントのテストに関しては、最大の懸念を要約しましょう。単一のコンポーネントを単独で解決するにはどうすればよいですか?まあ、結局のところ、あなたがそれをすることを可能にする気の利いたユーティリティがあります。
Reactの浅いレンダラーを使用すると、コンポーネントを1レベルにレンダリングできます。このことから、レンダリング方法が何をするかについて事実を主張することができます。注目に値するのは、domを必要としないということです
単位テストを速く実行するには、コンポーネントを単独でテストする方法が必要です。このようにして、単一の問題に焦点を合わせてテストし、次の懸念に進むことができます。これは、ソリューションが成長し、自由にリファクタリングできるようになります。コードの近くにとどまり、急速な変更を加え、ブラウザで機能することを安心させることができます。
このアプローチの利点の1つは、コードについてよりよく考えることです。これにより、手元の問題を扱う最良のソリューションが生成されます。気を散らすものに連れて行かれていないときは解放されます。人間の脳は、一度に複数の問題に対処するのにひどい仕事をしています。
たとえば、greatapelistをご覧ください。あなたが解決しようとしている主な関心事は何ですか?このコンポーネントは、フィルターに基づいた素晴らしい類人猿のリストを示しています。
1つのアプローチは、これを行うことです:
画像を表示してみましょう
Reactコンポーネントを使用して、すべてレンダリング方法を中心にしています。これにより、テストする必要があるものを正確に知ることがやや直感的になります。浅いレンダラーがそれを行うので、ノイズを排除しながら単一のコンポーネントにレーザーに焦点を合わせることができます。
示されているように、Reactコンポーネントは非常にテスト可能です。あなたのコンポーネントのための良いユニットテストを書くことを忘れる言い訳はありません。 良いことは、JSXが個々のテストではなく、あなたに対抗するのではなく、あなたのために働くことです。 JSXを使用すると、ブール人、コールバック、または必要なものをすべて渡すことができます。ユニットテストに挑戦するときにこれを覚えておいてください。
Jest Toolingを使用して、変更している特定のファイルのみでフィードバックを提供する方法が気に入っています。これにより、フィードバックループが短くなり、レーザーフォーカスが追加されます。いくつかの厳しい問題に取り組むとき、これがどれほど価値があるかをお待ちしております。 反応成分のテストに関するよくある質問(FAQ) Reactコンポーネントのアクセシビリティを確保するには、セマンティックHTMLの使用、画像の代替テキストの提供、キーボードでコンポーネントを使用できるようにするなど、アクセス可能なWebデザインのベストプラクティスに従うことが含まれます。また、アクセシビリティをテストするためのJestプラグインであるJest-Axeなどのツールを使用して、一般的なアクセシビリティの問題についてコンポーネントを自動的に確認することもできます。さらに、スクリーンリーダーやその他の支援技術を使用してコンポーネントをテストして、それらが本当にアクセスできるようにすることが重要です。 ブラウザーの開発者ツールのレスポンシブデザインモードを使用して、異なる画面サイズの反応コンポーネントをテストできます。これにより、さまざまな画面サイズと解像度をシミュレートし、コンポーネントがそれらを正しく見ていることを確認できます。 BrowserstackやSauce Labsなどのツールを使用して、異なる画面サイズの実際のデバイスでテストを実行することもできます。さまざまなユーザーロールを持つコンポーネントには、さまざまなタイプのユーザーのアクションをシミュレートし、コンポーネントが正しく応答することを確認します。たとえば、特定の機能はログインしたユーザーのみが利用できるか、管理者ユーザーが通常のユーザーとは異なるインターフェイスを見ることができることをテストする場合があります。これは、酵素によって提供されるシミュレーション関数を使用し、テストをセットアップして異なるユーザーロールを使用することで実行できます。FilterableGreatApeList
|_ GreatApeSearchBar
|_ GreatApeList
|_ GreatApeRow
すべてをまとめます1つの良い単位テストは、これを行うことです:
<span>class GreatApeSearchBar extends Component {
</span> <span>constructor(props) {
</span> <span>super(props);
</span>
<span>this.handleShowExtantOnlyChange = this.handleShowExtantOnlyChange.bind(this);
</span> <span>}
</span>
<span>handleShowExtantOnlyChange(e) {
</span> <span>this.props.onShowExtantOnlyInput(e.target.checked);
</span> <span>}
</span>
<span>render() {
</span> <span>return(
</span> <span><span><span><form</span>></span>
</span><span> <span><span><input</span>
</span></span><span> <span>id<span>="GreatApeSearchBar-showExtantOnly"</span>
</span></span><span> <span>type<span>="checkbox"</span>
</span></span><span> <span>checked<span>={this.props.showExtantOnly}</span>
</span></span><span> <span>onChange<span>={this.handleShowExtantOnlyChange}</span>
</span></span><span> <span>/></span>
</span><span>
</span><span> <span><span><label</span> htmlFor<span>="GreatApeSearchBar-showExtantOnly"</span>></span>Only show extant species<span><span></label</span>></span>
</span><span> <span><span></form</span>></span>
</span> <span>);
</span> <span>}
</span><span>}
</span>
反応コンポーネントのテストのベストプラクティスは何ですか?
テスト対応コンポーネントのベストプラクティスには、一度に1つの機能を検証する小さな集中テストの作成が含まれます。これにより、問題を識別して修正しやすくなります。また、実装の詳細ではなく、コンポーネントの出力をテストすることが重要です。これは、コンポーネントがそれを達成する方法ではなく、ユーザーが見て対話するものをチェックすることを意味します。最後に、反応成分をテストするために特別に設計されたJestや酵素などのツールを使用します。テストをより効率的かつ効果的にすることができる「浅いレンダリング」などの有用な機能を提供します。そして、それは特に反応成分のテストに適しています。 JESTを使用するには、最初にNPMまたはYARNを使用してプロジェクトにインストールする必要があります。次に、JESTによって提供されるdescrib and IT関数を使用してテストを作成できます。 IT関数の内部では、特定の条件が満たされていると主張するために期待することができます。 JESTは、モック関数を作成するための模擬関数を提供します。これは、コンポーネントがアプリケーションの他の部分とどのように相互作用するかをテストするのに役立ちます。 > Enzymeは、コンポーネントのテストが容易になるReactのJavaScriptテストユーティリティです。これは、子コンポーネントなしでコンポーネント自体のみをレンダリングする「浅いレンダリング」など、さまざまな方法でコンポーネントをレンダリングする機能を提供します。これにより、テストをより速く、より集中させることができます。酵素は、ボタンをクリックするなどのユーザーインタラクションをシミュレートしたり、コンポーネントの出力を検査したりする機能を提供します。
Reactコンポーネントでユーザーインタラクションをテストするにはどうすればよいですか?
反応コンポーネントのパフォーマンスをテストするにはどうすればよいですか? Reactコンポーネントは、Reactプロファイラーを使用して実行できます。これは、Reactアプリケーションがレンダリングの頻度とレンダリングの「コスト」が何であるかを測定するツールです。これにより、あまりにも頻繁にレンダリングしているコンポーネントを特定したり、レンダリングに時間がかかりすぎたりすると、アプリケーションが遅くなる可能性があります。また、Chrome DevToolsパフォーマンスパネルなどのブラウザツールを使用して、ネットワークリクエストやJavaScriptの実行時間などの要因など、アプリケーションの全体的なパフォーマンスを測定することもできます。 >
酵素が提供するSetProps関数を使用して、異なる小道具で反応コンポーネントをテストできます。これにより、コンポーネントがレンダリングされた後にコンポーネントのプロップを変更し、正しく応答することを確認できます。たとえば、コンポーネントが異なるテキストの小道具が与えられたときに正しいテキストを表示するか、オプションの小道具を正しく処理することをテストする場合があります。さまざまなブラウザのReactコンポーネントのテストは、BrowserStackやソースラボなどのツールを使用して実行できます。これらのツールを使用すると、実際のデバイスで実際のブラウザでテストを実行できます。これにより、ブラウザ固有のバグをキャッチするのに役立ちます。また、自動化されたテストでは視覚的な問題や使いやすさの問題を見逃す可能性があるため、さまざまなブラウザーでコンポーネントを手動でテストすることも重要です。さまざまな画面サイズで反応コンポーネントをテストするにはどうすればよいですか?
以上が反応コンポーネントをテストするガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。