3

間違ったクレデンシャルでサインインを試み、結果の応答本文で特定の「エラーボックス」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>
}

_マスタービュー

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

ダブルネスティングは次のようになります。

サインイン->_ページ->_マスター

応答に正しいhtmlが含まれていないため、ユニットテストが失敗します。実際のブラウザ(chrome)でコードを実行し、誤ったクレデンシャルを手動で指定すると、正しい応答が生成されます。失敗するのは単体テストだけです。

にドリルダウンするとresponse.Body.responseDocument.agilityPackDocumentInternal.DocumentNode.InnerHtml、この例外が表示されます。

テンプレートのコンパイルエラー:(15、11)タイプまたは名前空間名'XXXX'が見つかりませんでした

サインインビューをレイアウトとして_Masterを使用するように再度ポイントすると(中央の_Pageビューを切り取る)、単体テストに再度合格します。

それでも、_Pageビューはコード的には何もしません。タグを追加して、バトンを渡すだけ<script>です<style>。これらのタグに問題があるかどうかをテストするために、タグを_Masterビューに移動し、ネストを1つのレベル(SignIn-> _ Master)に維持して、テストに合格しました。

では、Nancy.Testing2つのレベルのかみそりレイアウトのネストをサポートしていますか?そうでなければ、誰かが私の間違いを見つけることができますか?

ありがとうございました

PS接続されているかどうかはわかりませんが、ビューのキャッシュが問題である可能性があります(Nancy Modulesのテストドライブを読んだ後)の値をNancy.StaticConfiguration.DisableCaches確認し、十分に設定されましたfalseDEBUGシンボルがオンになって実行されているにもかかわらず)デバッグモードでのテスト)。カスタム単体テストのBootStrapperクラスでこの値をtrueに設定しましたが、違いはありませんでした。

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

1 に答える 1

0

この質問に対する答えは、私のフォローアップの質問にあります。

@using ステートメントがカミソリ レイアウトに含まれていると、Nancy.Testing が失敗するのはなぜですか?

于 2012-08-28T09:01:58.367 に答える