2

在上一个问题中,Nancy.Testing 是否支持嵌套的 Razor 视图?我概述了在呈现嵌套剃刀布局时 Nancy 单元测试失败时遇到的困难。

经过调查,我现在可以细化该信息。问题与嵌套无关,它很简单:如果您在 razor 布局或视图中包含 @using 语句,那么如果从单元测试访问,Nancy 将无法找到引用的命名空间。

例如:

主布局

@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic>
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Test</title>    
    </head>
    <body>
        @RenderBody()        
    </body>
</html>

看法

@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic>
@{
    Layout = "Master.cshtml";
}
hello World 

如您所料,这很好用。但是,如果我们现在在主布局中添加一些服务器端处理,因此需要 @using 语句,那么单元测试会失败(代码运行正常,只有单元测试失败):

错误编译模板:(15, 11) 找不到类型或命名空间名称“uMentor”。

带有服务器端代码的主布局

@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic>
@using uMentor.Extensions
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>@Model.Title</title>   
    </head>
    <body>
        @{
            var user = Html.GetCurrentUser();
        }
        @RenderBody()        
    </body>
</html>

我已确保我的 web.config(网站项目和单元测试项目)具有正确的 razor 程序集和提到的命名空间:

网页配置

<configSections>
  <section name="razor" type="Nancy.ViewEngines.Razor.RazorConfigurationSection, Nancy.ViewEngines.Razor" />
</configSections>
<razor disableAutoIncludeModelNamespace="false">
  <assemblies>
    <add assembly="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <add assembly="Nancy" />
    <add assembly="uMentor" />
  </assemblies>
  <namespaces>
    <add namespace="Nancy" />
    <add namespace="uMentor" />
    <add namespace="uMentor.Domain" />
    <add namespace="uMentor.Extensions" />
  </namespaces>
</razor>

剥离一切,我可以构建最简单的“hello world”视图 -> 布局,其中没有任何内容,没有代码。单元测试通过(响应正文中包含正确的 html)。然后我在视图或布局的顶部添加了一个冗余的@using 语句,测试失败(响应正文包含上面的错误消息)。

仅使用 @using 的主布局 - 失败

@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic>
@using uMentor.Extensions
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Test</title>   
    </head>
    <body>
        @RenderBody()        
    </body>
</html>

因此,证据表明,将 @using 语句放入 razor 视图或布局会导致 razor 编译错误,该错误会静默失败,并在响应正文中返回错误消息。只有当您的测试碰巧检查了正文内容时,您才会发现存在问题。

感谢您的任何帮助。

4

1 回答 1

3

我的第一个猜测是将配置从 web.config 移动到 app.config。这对我有用,虽然我不知道为什么。

我也喜欢南希,它很棒,但文档真的很烂。因此,当我开发 Nancy 应用程序时,我将它的源代码挂钩到项目中(当然只有相关部分),当我遇到任何问题时,我会进入 Nancy 的源代码并自己找到问题。代码写得很好,很容易阅读。

干杯!

于 2012-08-27T16:58:35.200 回答