gpt4 book ai didi

unit-testing - Nancy.Testing 是否支持嵌套 Razor View ?

转载 作者:行者123 更新时间:2023-12-01 16:34:54 25 4
gpt4 key购买 nike

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

我的页面变得有点重复,因此我重新组织内容以创建一组简单的嵌套 Razor View ,如下所示:

登录 View

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

_主视图

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

这仍然有效,我的单元测试仍然通过(请耐心等待)。随着时间的流逝,代码变得越来越复杂,所以现在我需要再次重新组织。我在我的 Razor View 中添加了另一层嵌套。

_页面 View

@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 View 重新指向使用 _Master 作为其布局(删除中间的 _Page View )使单元测试再次通过。

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

Nancy.Testing 也是如此吗?支持两层 Razor 布局嵌套吗?否则,有人能发现我的错误吗?

谢谢

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

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

最佳答案

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

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

关于unit-testing - Nancy.Testing 是否支持嵌套 Razor View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11950126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com