3

JsonとしてラップされたKendo.UI.MvcDataSourceの結果を返すASP.NETMVC4コントローラーを単体テストしようとしています。問題は、返された実際のデータに到達できないことです..常にnullです。

問題は、Kendo.UIDataSourceResultをラップするコントローラーから返されるJSONをどのように検証するかです。

4

1 に答える 1

6

デバッグ中にVSで必要なデータのコレクションを確認できたため、この問題は腹立たしいものでした。テストフィクスチャを更新しました-モデルデータのアサートを実行できます。

基本的に私は次のことをしました:

  1. ActionResultをJsonResultとしてキャストします
  2. 動的型を使用して、Kendo.Mvc.UI.DataSourceResultを返したJsonResultから「データ」を取得します。動的タイプを使用する前は、nullのみが返されていました。(自分自身に注意してください、動的タイプについてもっと学びましょう)
  3. ステップ2の結果を、テストするデータ型としてキャストします。

コントローラ:

    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);
    }
于 2013-02-15T03:17:55.113 に答える