9

私はMVC3Razorビューエンジンを試していますが、私が探求している機能の1つは、ビューを単体テストする機能です。

Razorビューをアセンブリにコンパイルして文字列にレンダリングできる例をいくつか見てきました。問題は、文字列としてレンダリングされることです。そのため、文字列検索を行う必要があります。

これが私がやろうとしていることです。

  1. Razorヘルパーを作成する
  2. ヘルパーをコンパイルする
  3. コンパイルされたヘルパーを実行し、ViewModelを渡します
  4. ヘルパーの出力をある種のHTML/XML/ツリー構造として取得します

これを実行したい理由は、出力の特定の部分をテストできるようにするためです。ヘルパーは、さまざまな出力ガンクを含むHTMLを吐き出す可能性があります。私がやりたいのは、特定の値を持つチェックボックスがあるかどうかを確認することです(たとえば)。Seleniumのテストを見たことがあれば、サーバー駆動のテストではないことを除けば、私がやりたいことと似ています。

コンパイルされたRazor(または他のビューエンジン)ビューを取得して、文字列以外のものを出力する方法はありますか?

4

4 に答える 4

4

ビューエンジンの人生の目的は文字列を吐き出すことなので、簡単な答えはノーです。これらの文字列をXMLドキュメントに解析することは、@Craig-Mが提案したようにそれらに小さな構造を与える方法です。しかし、自分自身に問いかけなければならないのは、実際にテストしていることです。ビューがコンパイルされて何らかのHTMLが生成される場合、生成されるものに3つの問題が発生する可能性があります。

  • 表示されるデータが正しくありません。これはコントローラーレベルでテストするため、ビューテスト中は無視してかまいません。
  • MVCフレームワークにエラーがあり、間違ったHTML文字列が生成されました。MVCには独自のテストスイートがあり、関心の分離のおかげで問題ではないため、これについて心配する必要はありません。
  • HTMLがユーザーインターフェイスを壊しました。

最後の1つはテストするのに非常に便利ですが、javascript単体テストでテストしてみませんか?JsUnit、FireUnit、QUnitなどの人気のあるjavascriptユニットテストスイートをチェックしてください。これらはすべて、Razor出力を解析するよりもはるかに優れた仕事をします。

チェックボックスに割り当てられた値は、おそらくコントローラーテストでテストされると思います。しかし、あなたの例を使用するために、チェックボックスの値をテストすることは$('#theCheck')。val()=='値'である可能性があります。そして、これらを依存性注入されたリポジトリまたはサービスで実行されているWebサイトに対して実行して、「値」などを制御できます。

ちょっとした考え。

于 2011-02-17T22:32:10.470 に答える
1

これを実行する1つの方法は、html文字列をXDocumentに解析し、アセンブリにそれを返すようにすることです。次に、テストでLINQを使用してクエリを実行できます。

編集:私もかみそりのテスト戦略を理解しようとしています。どうやってヘルパーを働かせるのか知りたいです。これまでのところ、MVCフレームワークの外部で文字列にレンダリングするために空白を描画しています。

于 2011-02-16T16:49:37.890 に答える
1

ビューをhtmlにレンダリングしてから、そのhtmlをHtmlAgilityライブラリに送信するのはどうですか?そうすれば、HTMLを簡単にトラバース/ナビゲートできます。MVC自体でそれを行う方法はないと思います。

于 2011-03-08T22:21:10.873 に答える
0

Microsoftは、単体テストの目的で、ビューからHTMLを生成する方法について独自の答えを持っているようです。

于 2012-05-01T15:20:44.597 に答える