PHPでのスナップショットテスト:テストへの革新的なアプローチ
マット・トラスク、ポール・M・ジョーンズ、ヤジド・ハニフィがレビューしたピア。 SitePointのピアレビュアーに貢献してくれたことに感謝します!
プログラミングのブレークスルーはまれで爽快です。 スナップショットテストは、私にとってそのような瞬間の1つを表しており、私のアプローチを根本的に変更します。 私の経歴はPHPである間、最初はJavaScriptで遭遇したこの手法は、PHP開発に大きな利点をもたらします。 スナップショットテストとは何か、PHPアプリケーションの開発をどのように強化するかを調べましょう。
自動化された比較:
スナップショットテストアプリケーション出力または状態をキャプチャし、保存された「スナップショット」と比較し、複雑なデータ構造またはUIの不一致を自動的に強調しています。懸念への対処
「HTMLとJavaScriptの混合」は、懸念の問題の分離ではなく、テクノロジーの分離
の分離ではありません。 重要なのは、レンダリングロジックが入力によって完全に定義されることです。function Tweet(props) { return ( <div className="tweet"> <img src={props.user.avatar} / alt="スナップショットテストとは何ですか?また、PHPで実行可能ですか?" > <div className="text"> <div className="handle">{props.user.handle}</div> <div className="content">{props.content}</div> </div> </div> ); }
props
従来のインターフェイステストの制限
セレンやBehatなどのメソッドは、ブラウザーインタラクションをシミュレートしてインターフェイスをテストします。ただし、これらは脆く、基礎となるロジックではなく正確なマークアップ構造に依存する可能性があります。
スナップショットテスト:優れたアプローチ
スナップショットテストは、React例のようなコンポーネントの決定論的性質を活用します。 コンポーネントのレンダリング動作を定義し、テストは特定の入力の出力をキャプチャします。 後続のテストは、このスナップショットと比較して比較されます
PHPUnitスナップショットアサーションを使用したPHP実装Tweet
ライブラリは、PHPでのスナップショットテストを簡素化します。 作曲家経由でインストールします:
次に、phpunitテスト内の提供されたアサーションを使用します:spatie/phpunit-snapshot-assertions
function Tweet(props) { return ( <div className="tweet"> <img src={props.user.avatar} / alt="スナップショットテストとは何ですか?また、PHPで実行可能ですか?" > <div className="text"> <div className="handle">{props.user.handle}</div> <div className="content">{props.content}</div> </div> </div> ); }
の出力がキャプチャされ、保存されたスナップショットと比較されます。 php
composer require --dev spatie/phpunit-snapshot-assertions
$this->renderMyComponent()
小さなデータ駆動型テンプレートのテストに最適です。 モックデータ、テンプレートをレンダリングし、スナップショットに対して出力をアサートします。 イベントソーシング:
イベントストリームとプロジェクションのテストが大幅に容易になります。 一連のイベントと結果の投影状態を主張します。以上がスナップショットテストとは何ですか?また、PHPで実行可能ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。