- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试测试从我的 Nancy 应用程序返回的模型是否符合预期。我已关注文档 here但每当我调用 GetModel<T>
扩展方法它抛出 KeyNotFoundException
.
System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
public class SanityModule : NancyModule
{
public SanityModule()
{
Get["sanity-check"] = _ => Negotiate.WithModel(new SanityViewModel { Id = 1 })
.WithStatusCode(HttpStatusCode.OK);
}
}
public class SanityViewModel
{
public int Id { get; set; }
}
[TestFixture]
public class SanityModuleTests
{
[Test]
public void Sanity_Check()
{
// Arrange
var browser = new Browser(with =>
{
with.Module<SanityModule>();
with.ViewFactory<TestingViewFactory>();
});
// Act
var result = browser.Get("/sanity-check", with =>
{
with.HttpRequest();
with.Header("accept", "application/json");
});
var model = result.GetModel<SanityViewModel>();
// Asset
model.Id.ShouldBeEquivalentTo(1);
}
}
最佳答案
感谢可爱的家伙们,albertjan和 the.fringe.ninja , 在 Nancy Jabbr room我们已经解释了这里发生的事情。
TL;DR 这不起作用是有道理的,但错误消息应该更具描述性。下面有一个解决方法。
这里的问题是我请求响应为 application/json
在使用 TestingViewFactory
时.
我们来看看GetModel<T>();
的实现
public static TType GetModel<TType>(this BrowserResponse response)
{
return (TType)response.Context.Items[TestingViewContextKeys.VIEWMODEL];
}
NancyContext
中获取 View 模型。并将其转换为您的类型。
这是引发错误的地方,因为 NancyContext
中没有 View 模型 .这是因为 View 模型被添加到
RenderView
中的 NancyContext 中。
TestingViewFactory
的方法.
public Response RenderView(string viewName, dynamic model, ViewLocationContext viewLocationContext)
{
// Intercept and store interesting stuff
viewLocationContext.Context.Items[TestingViewContextKeys.VIEWMODEL] = model;
viewLocationContext.Context.Items[TestingViewContextKeys.VIEWNAME] = viewName;
viewLocationContext.Context.Items[TestingViewContextKeys.MODULENAME] = viewLocationContext.ModuleName;
viewLocationContext.Context.Items[TestingViewContextKeys.MODULEPATH] = viewLocationContext.ModulePath;
return this.decoratedViewFactory.RenderView(viewName, model, viewLocationContext);
}
GetModel<T>
如果您使用 html 请求。
with.Header("accept", "application/json");
with.Header("accept", "text/html");
ViewNotFoundException
.为避免这种情况,我需要实现自己的
IViewFactory
. (来自
the.fringe.ninja )
public class TestViewFactory : IViewFactory
{
#region IViewFactory Members
public Nancy.Response RenderView(string viewName, dynamic model, ViewLocationContext viewLocationContext)
{
viewLocationContext.Context.Items[Fixtures.SystemUnderTest.ViewModelKey] = model;
return new HtmlResponse();
}
#endregion
}
with.ViewFactory<TestingViewFactory>();
with.ViewFactory<TestViewFactory>();
GetModel<T>
应该无需 View 即可工作。
关于南希测试 GetModel<T> 抛出 KeyNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25652619/
我在解析请求文件时遇到问题。我的文件大小是 1338521 字节,但 Nancy 说,文件大小有时是 1751049 或 3200349。在我的 Windows PC 上它工作正常,在 Linux 服
我设置项目的步骤: 创建新的 asp.net 项目 安装包 Nancy.Viewengines.Razor 添加了 Views/hello.cshtml(简单的 hello world html) 添
我正在尝试获得第一个与 Nancy 一起使用的 Razor 模板,以及我的 .cshtml 的第一行... @inherits Nancy.ViewEngines.Razor.NancyRazorVi
SSVE是否支持嵌套迭代器? 我希望在SSVE View 中走动一个对象图(请参见下文),但我怀疑嵌套迭代器不是通往此处的方法。还有其他方法吗? 我知道SSVE是供内部使用的,并不是供整个生产使用的,
我正在使用 Corona SDK 将数据发布到我的 C# 服务器: headers["Content-Type"] = "application/x-www-form-urlencoded" head
我需要将一组对象从我的 Web 应用程序发送到我的 Nancy Web 服务以更新我的数据库。 只发送一个对象,它工作正常:在我的网络方法中,我使用 Request.Form..Value.Trim(
我有一个 RestSharp 客户端和 Nancy 自托管服务器。我想要的是 To send multipart form data from client and parse that data e
你能告诉我是否有特殊的 Razor 文件 _ViewStart.cshtml 南希支持吗?我知道它计划包含在内( here )。你能告诉我它现在是否可用吗?它目前对我不起作用。 谢谢 最佳答案 突发新
我知道这个问题是在一个月前提出的,但从未得到回答。我的程序正常启动,但在返回 View["Index", blogPost] 后找不到 Index.cshtml 并引发异常。 Get["/"] = p
遇到此处描述的问题 https://github.com/NancyFx/Nancy/issues/1528 具体来说,即使我按照我所理解的正确配置包括了 Razor View Engine,它也并不
我尝试在 URL 上使用 NancyModules 和 GET 字符串创建一个类,但是方法“Get”告诉我: "Error CS0021 Cannot apply indexing with [] t
我是一名优秀的程序员,十分优秀!