2012-08-14 66 views
3

我有一個單元測試,試圖用不正確的憑據登錄,並檢查一些特定的'errorbox'html的結果響應正文。這工作得很好。Nancy.Testing是否支持嵌套的Razor視圖?

[Fact] 
public void SignIn__Should_display_error_message_when_error_passed() 
{ 
    var browser = Fake.Browser(); 
    var response = browser.Get("/signin", with => with.Query("error", "true")); 

    response.Body["#errorBox"] 
      .ShouldExistOnce() 
      .And.ShouldBeOfClass("floatingError") 
      .And.ShouldContain("invalid", StringComparison.InvariantCultureIgnoreCase); 
} 

我的網頁被變得有點重複,所以我重新組織內容以創建一組簡單的嵌套剃刀的觀點,這樣的:

的登入查看

@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic> 
@{ 
    Layout = "_Master.cshtml"; 
} 
<h3>Sign In</h3> 
<form class="nice" method="POST"> 
    ... [labels, inputs etc] 
</form> 
@if (Model.HasError) 
{ 
    <div id="errorBox" class="floatingError">Invalid UserName or Password</div> 
} 

_Master View

@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic> 
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8" /> 
     <title>@Model.Title</title> 
     ... [css javascript etc] 
     @RenderSection("Head", required: false)  
    </head> 

    <body> 
     @RenderBody()   
    </body> 
</html> 

這仍然有效,我的單元測試仍然通過(與我一起承擔)。時間過去了,代碼變得越來越複雜,現在我需要重新組織。我爲我的剃刀視圖添加了另一層嵌套。

的_Page查看

@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic> 
@{ 
    Layout = "_Master.cshtml"; 
} 
@section Head{ 
    [... shared javascript, css] 
    @RenderSection("Head", required: false) 
} 
[.. some shared content] 
@RenderBody() 

雙重嵌套看起來是這樣的:

簽到 - > _Page - > _master

現在我的單元測試失敗作爲響應不包含正確的html。在真正的瀏覽器(chrome)中運行代碼並手動提供不正確的憑據會產生正確的響應,這只是單元測試失敗。

下鑽response.Body.responseDocument.agilityPackDocumentInternal.DocumentNode.InnerHtml顯示此異常:

錯誤編譯模板:(15,11)類型或命名空間名稱「XXXX」找不到

重新指向登入視圖回使用_Master作爲佈局(切出中間的_Page視圖)使單元測試再次通過。

然而,_Page視圖並沒有對代碼進行任何處理,它只是在接力棒上添加了一些<script><style>標籤和通行證。爲了測試這些標籤是否是問題,我將它們移至_Master視圖,並將嵌套保持在一個級別(SignIn - > _Master),並通過測試。

那麼,Nancy.Testing支持兩級剃鬚刀佈局嵌套嗎?否則,任何人都可以發現我的錯誤?

謝謝

附:我不知道它是否連接,但我懷疑視圖緩存可能是問題(在閱讀Test driving Nancy Modules後)我檢查了Nancy.StaticConfiguration.DisableCaches的值,果然,它被設置爲false(儘管我的DEBUG符號已打開並正在運行在調試模式下進行測試)。我在自定義單元測試BootStrapper類中將此值設置爲true,但這沒有什麼區別。

protected override void ConfigureApplicationContainer(TinyIoCContainer container) 
{ 
    base.ConfigureApplicationContainer(container); 
    Nancy.StaticConfiguration.DisableCaches = true; 
} 
+0

我已經打開了一個新的問題,用更精確的信息。請檢查一下:[爲什麼Nancy.Testing在@using語句包含在剃刀布局中時失敗?](http://stackoverflow.com/q/12052267/776476) – biofractal 2012-08-21 09:53:14

回答