2013-07-31 37 views
5

我的页面有以下隐藏字段我如何测试MVC Views?

<%= Html.Hidden("SessionId", Model.Form.UniqueSessionId) %> 

我的控制器

public class SomeController 
{ 
    public ActionResult Index() 
    { 
     var somemode = new GetSomeModel(); 
     return View(somemodel); 
    } 
} 

我想能够测试视图是否有隐藏字段

protected SomeController controller; 

protected void SetupController() 
{ 
    controller = new SomeController() 
} 

[Test] 
public void view_has_hidden_field_for_SessionId() 
{ 
    ViewResult result = controller.Index() as ViewResult; 
    Assert.IsTrue(result.contains("<input type="hidden" id="SessionId" />")); 
} 

的问题是:我如何渲染视图为字符串?任何帮助?

+0

这个问题不是重复的,但答案可以在http://stackoverflow.com/questions/9243433/how-to-render-a-razor-view-to-a-string-in- ASP净MVC-3。 –

+0

引用叔叔鲍勃(罗伯特马丁):“用你的眼睛” – MikeSW

+0

我想这里的问题是:你真的想单元测试一个视图。 –

回答

2

看看这个解决方案,它具有剃刀的观点和标准asp.net的观点支持:

Render a view as a string

我的其他意见,你会使用一个HTML解析器如HtmlAgilityPack让你然后可以查询它来查找您的隐藏字段。这种方法更好,因为当你重构你的html时,测试string.contains会使你的测试变得脆弱。