【问题标题】:How to test PARTIAL view was rendered in C# ASP .NET MVC如何测试 PARTIAL 视图在 C# ASP .NET MVC 中呈现
【发布时间】:2012-09-04 10:22:01
【问题描述】:

我有一个视图,里面有部分视图渲染:

<div class="partialViewDiv">
    @Html.RenderPartial("partial", Model.SomeModelProperty);
</div>

还有一个控制器,它返回这个视图

public ActionResult Action()
        {
            ...
            var model = new SomeModel(){SomeModelProperty = "SomeValue"}
            return View("view", model);
        }

我知道如何测试视图被渲染:

[TestMethod]
public void TestView()
{
   ...
   var result = controller.Action();

   // Assert
   result.AssertViewRendered().ForView("view").WithViewData<SomeModel>();
}

但是当我打电话时

result.AssertPartialViewRendered().ForView("partial").WithViewData<SomeModelPropertyType>();

我收到此错误消息

Expected result to be of type PartialViewResult. It is actually of type ViewResult.

我做错了什么?

【问题讨论】:

    标签: c# asp.net-mvc-3 unit-testing view partial-views


    【解决方案1】:

    我做错了什么?

    您正在测试控制器:此类测试本质上是模拟视图,只是验证控制器是否返回了预期的视图(和模型)。

    因为渲染PartialView“部分”的View“视图”没有参与测试,所以无法测试它是否按照你的预期做。

    一般来说,大多数人不会对视图进行单元测试;但如果您想这样做,请查看this blog 或谷歌的“MVC 单元测试视图”

    【讨论】:

      【解决方案2】:

      改变

      return View(model); 
      

      return PartialView(model);
      

      异常说明了一切。您期望的是部分视图结果,但您返回的是视图结果。

      【讨论】:

      • 断言AssertPartialViewRendered().ForView("partial")... 仍然会失败,因为控制器正在返回一个视图“视图”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多