2012-09-11 142 views
5

我有一个观点,它有局部视图渲染内:如何测试局部视图,在C#ASP .NET被渲染MVC

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

我在做什么错?

回答

3

我在做什么错?

您正在测试控制器:这类测试实质上是模拟视图并验证控制器是否正在返回预期视图(和模型)。

由于视野中的“视图”呈现的PartialView“部分”不参与测试,所以你无法检验它是否在做你所期望的。

一般来说,大多数人都没有单元测试的意见;但如果你想这样做看看this blog或谷歌的“MVC单元测试视图”

2

变化

return View(model); 

return PartialView(model); 

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

+0

断言AssertPartialViewRendered().ForView(“部分”)...'仍然会失败,因为控制器正在返回一个视图“视图”。 – Joe

+0

没有注意到。谢谢 – 2012-09-11 14:21:36