JsonとしてラップされたKendo.UI.MvcDataSourceの結果を返すASP.NETMVC4コントローラーを単体テストしようとしています。問題は、返された実際のデータに到達できないことです..常にnullです。
問題は、Kendo.UIDataSourceResultをラップするコントローラーから返されるJSONをどのように検証するかです。
JsonとしてラップされたKendo.UI.MvcDataSourceの結果を返すASP.NETMVC4コントローラーを単体テストしようとしています。問題は、返された実際のデータに到達できないことです..常にnullです。
問題は、Kendo.UIDataSourceResultをラップするコントローラーから返されるJSONをどのように検証するかです。
デバッグ中にVSで必要なデータのコレクションを確認できたため、この問題は腹立たしいものでした。テストフィクスチャを更新しました-モデルデータのアサートを実行できます。
基本的に私は次のことをしました:
コントローラ:
public ActionResult EditRead([DataSourceRequest] DataSourceRequest request)
{
return Json(GetViewModel().ToDataSourceResult(request));
}
単体テスト:
[Test]
public void EditRead_Should_Read_List_Or_Pharmacies()
{
//Create test db
var db = new FakePharmacyDirectoryDb();
db.AddSet(TestData.PharmacyLocations(10));
//setup controller, we need to mock a DataSourceRequest
//that Kendo.Mvc uses to communicate with the View
var controller = new DirectoryController(db);
var kendoDataRequest = new DataSourceRequest();
//get the result back from the controller
var controllerResult = controller.EditRead(kendoDataRequest);
//cast the results to Json
var jsonResult = controllerResult as JsonResult;
//at runtime, jsonRsult.Data data will return variable of type Kendo.Mvc.UI.DataSourceResult
dynamic kendoResultData = jsonResult.Data;
//... which you can then cast DataSourceResult.Data as
//the return type you are trying to test
var results = kendoResultData.Data as List<PharmacyLocation>;
Assert.IsInstanceOf<List<PharmacyLocation>>(results);
Assert.AreEqual(10,results.Count);
}