5

我有一个视图,它内部有部分视图渲染:

<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.

我究竟做错了什么?

4

2 回答 2

3

我究竟做错了什么?

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

因为渲染PartialView“部分”的View“视图”不参与测试,所以你无法测试它是否在做你期望的事情。

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

于 2012-09-11T13:28:41.487 回答
2

改变

return View(model); 

return PartialView(model);

例外说明了一切。您期待部分视图结果,但您返回的是视图结果。

于 2012-09-11T13:26:32.567 回答