【问题标题】:Does Nancy.Testing support nested Razor views?Nancy.Testing 是否支持嵌套的 Razor 视图?
【发布时间】:2012-08-10 14:47:30
【问题描述】:

我有一个单元测试尝试使用不正确的凭据登录,并检查生成的响应正文中是否存在某些特定的“错误框”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>

这仍然有效,我的单元测试仍然通过(请耐心等待)。时间过去了,代码变得越来越复杂,所以现在我需要重新组织一下。我在剃刀视图中添加了另一层嵌套。

_页面浏览量

@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”

将 SignIn 视图重新指向使用 _Master 作为其布局(切掉中间的 _Page 视图)使单元测试再次通过。

然而 _Page 视图在代码方面没有做任何事情,它只是添加了一些 &lt;script&gt;&lt;style&gt; 标记并传递接力棒。为了测试这些标签是否有问题,我将它们转移到 _Master 视图并将嵌套保持在一个级别(SignIn -> _Master)并且测试通过了。

那么,Nancy.Testing 是否支持两级剃须刀布局嵌套?否则,有人能看出我的错误吗?

谢谢

PS 不知道有没有连接,但我怀疑可能是视图缓存的问题(在阅读Test driving Nancy Modules之后)我检查了Nancy.StaticConfiguration.DisableCaches的值,果然,它设置为false(尽管我的DEBUG 符号已打开并在调试模式下运行测试)。我在我的自定义单元测试 BootStrapper 类中将此值设置为 true,但这没有任何区别。

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

【问题讨论】:

标签: unit-testing razor nancy


【解决方案1】:

这个问题的答案可以在我的后续问题中找到:

Why does Nancy.Testing fail when @using statements are included in razor layouts?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 2016-11-06
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多