2015-06-27 100 views
1

我試圖徒勞地斷言來自南希端點的Json響應。在南希測試REST API

這裏的被測模塊:

public MyModule() 
    { 
     Get["/mypath", true] = async (parameters, ct) => 
     { 
      ... 

      return something.ToDictionary(x => x.Key, x => x.Value); 
     }; 
    } 

如何編寫一個測試,驗證在響應中詞典的內容?

我已經嘗試了所有種類的東西,比如:

  var bootstrapper = new MyBootstrapper(); 
      var browser = new Browser(bootstrapper); 

      var result = browser.Get("/mypath", 
       with => 
       { 
        with.Accept(new MediaRange("application/json")); 
       }); 

      Assert.AreEqual(HttpStatusCode.OK, result.StatusCode, "Body: " + Encoding.UTF8.GetString(result.Body.ToArray())); 
      Assert.That(result.GetModel<IDictionary<string, string>>()[SOME_KEY], Is.EqualTo("expected value")); 

我已經和嘗試沒有興田MediaRange,並試圖瞭解在字典可以在響應中找到,但能似乎無處不在。 result.GetModel似乎並不包含結果字典。

我能看到結果的唯一方法就是看Encoding.UTF8.GetString(result.Body.ToArray())。這給出了原始的JSON。但是:

  1. 手動解碼的字節數組是醜陋的,
  2. 我寧願一個JSON對象,而不是一個字符串。這可能嗎?

回答

0

詞典是在一個響應體內。您可以使用特殊方法從Nancy.Testing框架反序列化體內轉化爲特定的格式,如DeserializeJsonNancy.Testing - test-dialogues with Requests and Response

// Replace dictionary type parameters with yours 
var actualValue = result.Body.DeserializeJson<Dictionary<object, object>>(); 

更多關於馬庫斯Hammarbergs博客NancyFx測試的細節。

+0

謝謝,我稍後再看看! –

+0

GetModel 和DeserializeJson 擴展方法有什麼區別? – reckface