2016-08-23 41 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。現在您可以確保您的網頁代碼和測試套件正在使用相同的模板文件。有關更多詳細信息,請參閱下面的答案評論。

更新09/06

在你的第三個項目,你可以添加你的 「罐頭模板」 HTML文件作爲project resource。查看詳細鏈接。我的團隊將其「Build Action」設置爲「嵌入式資源」(所以它嵌入到編譯後的dll中),並將其「Copy To Output Directory」設置爲「Do not Copy」(不應複製任何內容),因爲它將被嵌入到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的東西在第三個項目中。模板文件,你想在網絡和測試項目中保持一致,也應該在第三個項目中生存。您的網站和測試套件項目應分別引用第三個項目。 – BobbyA

+0

因此,當您的網頁代碼需要生成句柄HTML時,它會調用第三個項目來處理該句柄。當你的單元測試套件需要生成句柄HTML時,它也會對第三個項目進行相同的調用。這可以確保您的Web和測試項目都將使用相同的模板文件,因爲它位於第三個引用和使用的項目中。 – BobbyA

相關問題