【问题标题】:NancyFx and unit testing Response.AsFile(...) fails with NotFoundNancyFx 和单元测试 Response.AsFile(...) 因 NotFound 而失败
【发布时间】:2014-06-14 04:19:07
【问题描述】:

这是我的(精简的)模块

public class MyModule : NancyModule
{
    public MyModule() : base("/path")
    {
        Get["/{filename}"] = x =>
        {
            var fileName = (string)x.filename;
            var path = Path.Combine("files", fileName);
            if (!File.Exists(path)) throw new FileNotFoundException();

            return Response.AsFile(path);
        }
    }
}

此代码有效并成功将正确的文件传送到浏览器。

现在我已经写了一个测试:

    [TestMethod, DeploymentItem("file.txt", "files")]
    public void CanDownloadFile()
    {

        var path = @"files\file.txt";
        Assert.IsTrue(File.Exists(path));

        var bootstrapper = new MyBootstrapper();
        var browser = new Browser(bootstrapper); // from Nancy.Testing

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

        var body = result.Body.AsString();
        Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
    }

使用此代码,我的测试失败,因为 StatusCode 是 NotFound 而不是 OK

我什至尝试用

替换 Response.AsFile()
var info = new FileInfo(path);
return new GenericFileResponse(info.FullName);

并在执行我的测试时三次检查该文件是否确实存在于磁盘上。

有什么问题?

【问题讨论】:

  • 我知道它已经很老了。但我想知道你能解决这个问题吗?
  • @KokiralaSudheer 我想我将代码更改为使用return Response.FromStream(stream).AsAttachment(fileName, contentType); 您可以使用MimeTypes.GetMimeType(filePath) 找出contentType(看看来自nancy 的GenericFileResponse.cs

标签: c# .net testing nancy


【解决方案1】:

解决方案中是否包含文件“file.txt”?包括这个。

在 Visual Studio 的文件属性中,将属性 Copy to Output Directory 更改为 Copy if newer.

但是您不需要创建一个模块来执行此操作。 Yo 可以在 Nancy 引导程序中管理静态内容。这是文档https://github.com/NancyFx/Nancy/wiki/Managing-static-content

这样做,您不需要测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多