2

前の質問で、Nancy.TestingはネストされたRazorビューをサポートしていますか?ネストされたかみそりのレイアウトが表示されたときにナンシーの単体テストが失敗するという問題について概説しました。

調査した後、私はその情報を洗練することができます。問題はネストとは関係ありません。@usingステートメントをかみそりのレイアウトまたはビューに含めると、ユニットテストからアクセスした場合、ナンシーはその参照された名前空間を見つけることができません。

例えば:

マスターレイアウト

@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(Webサイトプロジェクトと単体テストプロジェクトの両方)に、上記の正しいかみそりアセンブリと名前空間があることを確認しました。

Web.config

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

すべてを取り除いて、最も単純な「helloworld」ビュー->レイアウトを構築できます。レイアウトには何も含まれていません。コードもありません。単体テストに合格します(応答本文には正しい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ステートメントをかみそりのビューまたはレイアウトに配置すると、かみそりのコンパイルエラーが発生し、サイレントに失敗して、応答本文にエラーメッセージが返されることを示しています。あなたのテストが体の内容をチェックするために起こった場合にのみ、あなたは問題があったことを発見するでしょう。

助けてくれてありがとう。

4

1 に答える 1

3

私の最初の推測は、構成をweb.configからapp.configに移動することです。理由はわかりませんが、これは私にとってはうまくいきました。

また、私はナンシーが大好きです、それは素晴らしいです、しかしドキュメンテーションは本当にひどいです。このため、Nancyアプリを開発しているときは、そのソースコードをプロジェクトにフックし(もちろん、関連する部分のみ)、問題が発生したときよりも、Nancyのソースコードにアクセスして自分で問題を見つけます。コードはよく書かれていて、読みやすいです。

乾杯!

于 2012-08-27T16:58:35.200 に答える