cfwheels でリダイレクトを単体テストする方法
-
21-09-2019 - |
質問
リダイレクトを実行するコントローラーアクションの単体テストを行う正しい方法は何でしょうか?
アップデート:私は CFWheels プロジェクトの中心的な開発者です。私がこの質問をする理由は、現在、組み込みのテスト フレームワークの強化に取り組んでおり、開発者がアプリケーションをテストしやすくするために、CFWheels でこのようなものにアプローチして実装する方法を考えているからです。 。
アップデート:これをテストする方法がわかりました。アクションが完了してディスパッチャーに戻された後にリダイレクトを実行するには、ホイール コントローラーの内部を少し書き直す必要があるようです。このアプローチの唯一の点は、事前に適切な予防措置を講じた場合を除き、 redirectTo() の後のコードはすべて実行されるということです。これには、redirectTo() ステートメントの後に return を置くか、アクションに条件チェックを入れて redirectTo() コードを他のコードから分離することが含まれます。また、redirectTo() が実行されると、他に何もレンダリングされないようにすることも含まれます。
解決
リダイレクト メカニズムを複数の関数に分割すると、次のようなテストが非常に簡単になります。a) ターゲット URL を決定する関数、b) リダイレクトを実行する関数。
このようにして、functionA を非常に簡単にテストでき、とにかく functionA をテストしたいものになります。それはコードです あなた 書きました。そこにあなたの本当の論理があるのです。FunctionB はあなたのコードではありません。これは ColdFusion の根性であり、CFLocation をテストすることにあまり意味はありません。
100% のテスト カバレッジを達成するという使命がある場合は、ロジックのさまざまなブランチをすべて実行する functionA に 10 回のテストを費やし、次に Terry が提案する方法でリダイレクトを実行する functionB に 1 回のテストを費やすことができます。したがって、この方法では、遅いテストは 10 件ではなく 1 件だけになります。
このアプローチを一般化して、他のシナリオでも使用できます。ファイル システム、Web サービス、http、ftp、電子メールなど:「制御できずテストしたくないものから、制御できテストしたいものを抽出する」
他のヒント
あなたはfalseにリダイレクトセットでのcfhttpを使用して、適切なURLとコントローラを呼び出すことができます。次いで、得られたcfhttpの結果構造体をテストし、それはリダイレクトがあなたを取る場所についての情報を持っている必要があります。