間違ったクレデンシャルでサインインを試み、結果の応答本文で特定の「エラーボックス」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.Testing
2つのレベルのかみそりレイアウトのネストをサポートしていますか?そうでなければ、誰かが私の間違いを見つけることができますか?
ありがとうございました
PS接続されているかどうかはわかりませんが、ビューのキャッシュが問題である可能性があります(Nancy Modulesのテストドライブを読んだ後)の値をNancy.StaticConfiguration.DisableCaches
確認し、十分に設定されましたfalse
(DEBUG
シンボルがオンになって実行されているにもかかわらず)デバッグモードでのテスト)。カスタム単体テストのBootStrapperクラスでこの値をtrueに設定しましたが、違いはありませんでした。
protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
base.ConfigureApplicationContainer(container);
Nancy.StaticConfiguration.DisableCaches = true;
}