2012-09-11 112 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