我有一个单元测试,尝试登入与不正确的凭据,并且检查所得到的响应主体对某些特定“errorbox” HTML。 这一切正常。
[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查看
@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。 运行在真正的浏览器(铬)的编码和手动供给不正确的凭据产生正确的响应时,它仅是单元测试失败。
向下钻取到response.Body.responseDocument.agilityPackDocumentInternal.DocumentNode.InnerHtml
显示此异常:
错误编译模板:(15,11)类型或命名空间名称“XXXX”找不到
重新指向登入视图回使用_master作为其布局(切割出中间_Page视图)使单元测试再次通过。
然而,_Page观点并没有什么代码明智的,它只是增加了一些<script>
和<style>
标记和传递接力棒。 为了测试是否这些标签都是问题,我调整了他们的看法_master并保持嵌套在一个级别(签到 - > _master),并通过了测试。
那么,这是否Nancy.Testing
支持剃刀布局两个嵌套层次? 否则,有谁能够发现我的错误?
谢谢
PS我不知道这是否已连接,但我怀疑视图缓存可能是问题(看过之后试驾南希模块我检查的值) Nancy.StaticConfiguration.DisableCaches
果然,它被设置为false
(尽管我DEBUG
符号被接通和运行在调试模式下测试)。 我将该值设置为true,在我的自定义单元测试的引导程序类,但这并没有区别。
protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
base.ConfigureApplicationContainer(container);
Nancy.StaticConfiguration.DisableCaches = true;
}