2016-08-23 4 views
0

Handlebars.netを使用して、asp.net Webアプリケーションでテンプレートを有効にしています。私たちは、Web上のファイルシステムを使って作成して利用できる「缶詰」テンプレートだけでなく、データベース内にユーザがカスタマイズ可能なテンプレートを提供しています。缶詰のテンプレートが適切にレンダリングされるように、私はMSTest単体テストでそれらをテストしたいと思います。カスタムコンテンツ用のテンプレートをWebテストと単体テストの両方で使用できるようにするにはどうすればよいですか?

ウェブサイトの同じファイルが同じソリューション内の別のテストプロジェクトにMSTestでロードされていることを確認するにはどうすればよいですか?

+0

あなたの缶詰のテンプレートも保存されていますデータベースに? –

+0

いいえ、それらはテキストファイルとして保存されています –

答えて

0

これはあなたのハンドルバーのテンプレートをロードし、データとそれらを埋めコードです:

var htmlTemplateStr = //Open your "Canned Template" and load it into this string 

var LoadedTemplate = Handlebars.Compile(htmlTemplateStr); 

var contextObject = //create an object that will hold all the variables your 
        // template will be looking for 

var outputHtml = LoadedTemplate(contextJson); 

は、独自のプロジェクトにこのコードをカプセル化します。このプロジェクトは、Webコードを持つプロジェクトとテストがあるプロジェクトの両方で参照され、ハンドルバーのHTMLが生成されます。これで、Webコードとテストスイートで同じテンプレートファイルが使用されていることが保証されます。詳細については、この回答のコメントを参照してください。あなたの3番目のプロジェクトで

更新09/06

、あなたはproject resourceとしてあなたの "缶詰テンプレート" HTMLファイルを追加することができます。詳細はリンクをご覧ください。私のチームは、 "ビルドアクション"を "埋め込みリソース"(コンパイルされたdllに埋め込まれている)に設定し、 "コピー先出力ディレクトリ"を "コピーしない"に設定しました。それはDLLの中に埋め込まれます)

缶詰テンプレートHTMLファイルをリソースとしてプロジェクトに追加されたら、次の関数でHTMLを取得することができます。

private string GetCannedTemplateHtml(string resourceFilename) 
{ 
    Assembly assem = this.GetType().Assembly; 
    using(Stream stream = assem.GetManifestResourceStream(resourceFilename)) 
    { 
     using (var reader = new StreamReader(stream)) 
     { 
      return reader.ReadToEnd(); 
     } 
    } 
} 
+0

私はハンドルバーを理解しています。 Webプロジェクトで同じファイルを使用したいのですが、テストプロジェクト –

+0

も使用したいと思います。私が言っていることは、Handlebarsのものが3番目のプロジェクトになるようにコードを再構成しなければならないということです。また、Webとテストプロジェクトで同じにしたいテンプレートファイルも、その3番目のプロジェクトに含める必要があります。あなたのWebプロジェクトとテストスイートプロジェクトはそれぞれ、その3番目のプロジェクトを参照する必要があります。 – BobbyA

+0

あなたのWebコードがハンドルバーHTMLを生成する必要があるとき、それを処理するためにその第3のプロジェクトを呼び出すでしょう。ユニットテストスイートでハンドルバーHTMLを生成する必要がある場合、その3番目のプロジェクトにも同じ呼び出しが行われます。これにより、ウェブとテストプロジェクトの両方が同じテンプレートファイルを使用することになります。なぜなら、参照と使用の両方の3番目のプロジェクトに住んでいるからです。 – BobbyA

関連する問題