1

テストが機能しない理由が見つかりません。なぜそれが起こるのか知っている人はいますか?これら 2 つのテストの違いはビューのみです。最初は「.html」ページで、2 番目は「.liquid」です。私のプロジェクトでは「.liquid」を使用しているため、「.html」は正しい動作テストをテストするためだけのものです。私はナンシーモジュールを持っています

public sealed class Module : NancyModule
{
    public Module(IBackend storage)
    {
        Get["/"] = _ => View["Create.liquid"];     
        Get["/Test"] = _ => View["TestHtml.html"];
    }
}

そしてテスト

[Test]
public void test_html()
{
    // Given
    var bootstrapper = new ConfigurableBootstrapper(with =>
    {
        var module = new Module(new Endpoint());
        with.Module(module);
    });
    browser = new Browser(bootstrapper);

    // When
    var result = browser.Get("/Test", with =>
    {
        with.HttpRequest();
    });

    // Then
    Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
}

[Test]
public void test_liquid()
{
    // Given
    var bootstrapper = new ConfigurableBootstrapper(with =>
    {
        var module = new Module(new Endpoint());
        with.Module(module);
    });
    browser = new Browser(bootstrapper);

    // When
    var result = browser.Get("/", with =>
    {
        with.HttpRequest();
    });

    // Then
    Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
}

二次試験で例外あり

System.Exception : ConfigurableBootstrapper Exception
----> Nancy.RequestExecutionException : Oh noes!
----> Nancy.ViewEngines.ViewNotFoundException : Unable to locate view 'Create.liquid'
Currently available view engine extensions: sshtml,html,htm
Locations inspected: ,,,,,,,,views/Module/Create.liquid-en-    US,views/Module/Create.liquid,Module/Create.liquid-en-US,Module/Create.liquid,views/Create.liquid-en-US,views/Create.liquid,Create.liquid-en-US,Create.liquid
Root path: D:\Projects\epm-vsp-pasta\Tests\bin\Debug

スタック トレースあり

at Nancy.Testing.PassThroughStatusCodeHandler.Handle(HttpStatusCode statusCode, NancyContext context) in d:\Nancy-master\src\Nancy.Testing\PassThroughStatusHandler.cs: line 22
at Nancy.NancyEngine.CheckStatusCodeHandler(NancyContext context) in d:\Nancy-master\src\Nancy\NancyEngine.cs: line 219
at Nancy.NancyEngine.HandleRequest(Request request, Func`2 preRequest) in d:\Nancy-master\src\Nancy\NancyEngine.cs: line 112
at Nancy.NancyEngine.HandleRequest(Request request) in d:\Nancy-master\src\Nancy\NancyEngine.cs: line 77
at Nancy.Testing.Browser.HandleRequest(String method, String path, Action`1 browserContext) in d:\Nancy-master\src\Nancy.Testing\Browser.cs: line 125
at Nancy.Testing.Browser.Get(String path, Action`1 browserContext) in d:\Nancy-master\src\Nancy.Testing\Browser.cs: line 62
at Tests.TestModule.test_liquid() in TestModule.cs: line 111 --RequestExecutionException
at Nancy.NancyEngine.InvokeOnErrorHook(NancyContext context, ErrorPipeline pipeline, Exception ex) in d:\Nancy-master\src\Nancy\NancyEngine.cs: line 272
--ViewNotFoundException    
4

3 に答える 3

2

これは、.NET アセンブリの読み込みに関係しています。Nancy.ViewEngines.Dotliquid アセンブリの型は直接使用されないため、.NET コンパイラはそれがスマートであり、アセンブリ メタ データに参照を含めないと考えます。これにより、実行時にアセンブリがアプリケーション ドメインにまったく読み込まれなくなります。

.html ファイルで機能する理由は、.html 拡張子を管理する SuperSimpleViewEngine が Nancy.dll に組み込まれ、読み込まれるためです。

アセンブリの型を明示的に使用することで、これを回避できます。たとえばvar foo = typeof(DotLiquidViewEngine)、テスト コードに次のようなものをViewEngine<DotLiquidViewEngine>()配置したり、構成可能なブートストラップ セットアップでプロパティを使用したりできます。

次のリリースである 0.17 では、"bin" フォルダー内のアセンブリをスキャンし、Nancy* アセンブリを参照するアセンブリを明示的に読み込むことで、この影響を可能な限り軽減するコードを追加しました。

お役に立てれば

于 2013-03-06T11:43:45.657 に答える
0

ページが出力ディレクトリにコピーされていない場合に、これが発生するのを見てきました。

つまり、Visual Studio で .liquid ファイルのプロパティをチェックし、作業中の .html ファイルと同じ [出力ディレクトリにコピー] 設定があることを確認します。

于 2015-08-15T20:53:12.457 に答える