Nissan
Nissan

Reputation: 1995

How do I test an ASP.Net MVC View?

I want to write a unit test to ensure that the view I am returning is the correct one.

My plan is to write a test that first invokes the controller and then calls the ActionResult method I plan to test I thought I could write something like

Controller controller = new HomeController();
var actionresult = controller.Index();
Assert.False(actionresult.ToString(), String.Empty);

which would then allow me to parse the actionresult for the test value. However I cannot directly instantiate the public ActionResult Index() method.

How do I do this?

Upvotes: 4

Views: 231

Answers (2)

Matthew Groves
Matthew Groves

Reputation: 26169

Here's an example from Professional ASP.NET MVC 1.0 (book):


[TestMethod]
public void AboutReturnsAboutView()
{
     HomeController controller = new HomeController();
     ViewResult result = controller.About() as ViewResult;

     Assert.AreEqual("About", result.ViewName);
}

Note that this will fail if you don't return an explicit view in your controller method, i.e. do this:


     Return(View("About"));

not this:


     Return(View());

Or the test won't pass. You should only need to do this if your method will ever return more than one view, otherwise you should return an implicit view anyway and not bother testing the framework.

Upvotes: 1

Iain Holder
Iain Holder

Reputation: 14272

The test helpers in MVCContrib will help you here.

ViewResult result = controller.Index().AssertViewRendered().ForView("Blah");

Upvotes: 4

Related Questions