2011-01-29 6 views
9

私はMVC3 Razorビューエンジンを試しています。私が検討している機能の1つは、ユニットテストビューです。ユニットテストMVC3 Razorヘルパー/ビュー(文字列なし)

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

ここに私がやろうとしていることがあります。

  1. のViewModel
  2. に渡して、ヘルパーをコンパイル
  3. コンパイルヘルパー
  4. 実行して、HTML/XML /ツリー構造のいくつかの並べ替え
としてヘルパーの出力を取得レイザーヘルパーを作成します。

これをやりたいのは、出力の特定の部分をテストできるようにするためです。ヘルパーは、さまざまなアウトプット・ギャンクを含むHTMLを吐き出す可能性が高くなります。私がしたいのは、特定の値(例えば)を持つチェックボックスがあるかどうかを調べることです。セレンテストを見たことがあるなら、それはサーバー駆動テストではなく、私がやりたいことに似ています。

コンパイル済みのRazor(または他のビューエンジン)ビューに文字列以外のものを出力する方法はありますか?

答えて

4

短い答えはいいえ、ビューエンジンの目的は人生で文字列を吐き出すことです。これらの文字列をXML文書に解析することは、@ Craig-Mのような小さな構造を与える方法です。しかし、自分自身に尋ねなければならないことは、あなたが本当にテストしていることです。ビューがコンパイルして何らかのHTMLを生成する場合、生成されたものに3つの問題があります。

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

最後の1つはテストするのがとてもいいですが、それはJavaScriptの単体テストでテストしてみませんか? JsUnit、FireUnit、QUnitなどの一般的なjavascriptユニットテストスイートをチェックしてください。あなたはRazorの出力を解析するよりもはるかに優れた仕事をするでしょう。

チェックボックスに割り当てられた値は、おそらくコントローラテストでテストされると思います。しかし、あなたの例を使用するには、チェックボックスの値をテストすることは$( '#theCheck')となります。val()== 'value'。また、依存関係注入リポジトリやサービスを実行しているウェブサイトに対してこれらを実行して、 '価値'のようなものを制御することもできます。

単なる考えです。

+0

優れた答えをありがとう。 HTMLレベルでテストする理由は、ビュー内のロジックをテストするためです。たとえば、Productsを含むViewModelを渡し、在庫があるというプロパティがあるとします。商品に在庫== 0がある場合は、購入リンクを表示しないでください。後で、ViewModelにロジックを追加して、製品に在庫== 0がないことを保証しますが、代わりにIsInStockを使用します。プロパティ。私は正しいHTMLを生成しないために失敗するテストをしたい。このテストを書くための1つの方法は、正当なViewModelを構築してビューに渡し、リンクが生成されているかどうかをチェックすることです。理にかなっている? ありがとう、 –

+0

うん、私は従う。 QUnitにリンクが存在することを確認すると、次のような単純なものになります。 test( "リンクのテスト"、function(){ ok($( '#myLink')。length == 1、 "link present"); }); – Milimetric

1

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

編集:私もRazorテスト戦略を理解しようとしています。私はあなたがヘルパーをどのように働かせるか知ることに興味があります。これまでは、MVCフレームワーク外の文字列にレンダリングする方法については空白を描いています。

+0

これは私が今行っている方向です。 Razorを使用しても、ビューをテストするためにすべての依存関係(TempDataなど)を取得するのは面倒です。私は他のViewエンジンを調べるかもしれませんが、私はそれが問題であるASP.NET MVCだと思います。何か進歩があれば教えてください!ありがとう –

+0

私は、文字列にレンダリングされたビューを得るために、さまざまな方法を試して2日間過ごしました。今まで運がない。内部のクラスをインスタンス化する必要があるか、MVCヘルパーを使用できないなど、あらゆる経路が何らかの抵抗に逆らっていました。このプロジェクトですでにWebAiiのテストを行っているので、時間を使い果たして私の努力を断念しなければなりませんでした。私は自分のプロジェクトでこれをやることに非常に関心があります。もし解決策が出たら、ここに投稿することになります。 –

+0

少し遅れましたが、次の質問でRazorビュー用の作業ユニットテストハーネスを入手するための部品を掲載しました:http://stackoverflow.com/questions/8720222/how-do-i-test-views-using-razor- syntax-in-mvc3 – Lucero

1

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

+0

これは私が終わった方向です。 HTML5が登場して以来、実際のXMLが後で問題になることが予想されるようです。 –