我們使用NancyFx來託管單個頁面應用程序和多個ReST端點。代碼和測試使用相同的引導程序,唯一的區別是在測試中我們使用測試框架中的Nancy Browser。NancyFx測試返回無效的Json
如果我從網站返回一個簡單的對象,那麼所有的功能都可以像預期的那樣通過應用程序或測試框架進行。然而,真正的問題是我們要返回的對象包含一些動態數據,儘管它本身不是一個動態對象。該應用程序工作正常,但測試失敗,因爲JSON無效,字符串缺少引號和日期格式不正確。
var browser = new Browser(bootstrapper);
_response = browser.Get("http://localhost/...", with =>
{
with.HttpRequest();
with.Header("Accept", "application/json");
});
var bstr = _response.Body.AsString();
我已經附着在管道AfterRequest方法的方法,同時測試,我可以看到JSON字符串看起來不錯,通過觀察在NancyContext響應特性,但只要我們得到的響應對象返回從瀏覽器並將其轉換爲字符串,它不再有效的JSON。
protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
{
base.ApplicationStartup(container, pipelines);
pipelines.AfterRequest += Foo;
}
private void Foo(NancyContext obj)
{
//Can see the Response on the NancyContext here
}
如果我不能解決這個問題,我會考慮放棄南希測試框架,只是在測試環境中自我託管。
編輯
我得到使用NancySelfHost類似的結果。它看起來像是在使用自主或測試瀏覽器時沒有采用Json.Net序列化程序。我正在使用在Tiny IoC https://github.com/NancyFx/Nancy.Serialization.JsonNet中註冊自定義串行器的標準設置。
public class CustomJsonSerializer : JsonSerializer
{
public CustomJsonSerializer()
{
this.ContractResolver = new CamelCasePropertyNamesContractResolver();
this.Formatting = Formatting.Indented;
}
}
public class Bootstrapper : DefaultNancyBootstrapper
{
protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
base.ConfigureApplicationContainer(container);
container.Register(typeof(JsonSerializer), typeof(CustomJsonSerializer));
}
}
我沒有提到它的問題的第一部分,但在編輯我提到這是用在自拍主機或當我們在做什麼,但是Json.Net串行沒有被拾起南希測試瀏覽器。只有在通過Asp.Net託管時。我確實有一個工作,我將作爲答案發布。 – Bronumski 2014-10-07 12:51:02
奇怪 - 我在自己的主機上檢查了它,並且它與來自nuget的Json.NET序列化程序工作正常。 – 2014-10-07 16:05:07