我有一個單元測試,試圖用不正確的憑據登錄,並檢查一些特定的'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;
}
我已經打開了一個新的問題,用更精確的信息。請檢查一下:[爲什麼Nancy.Testing在@using語句包含在剃刀布局中時失敗?](http://stackoverflow.com/q/12052267/776476) – biofractal 2012-08-21 09:53:14