I can’t find a solution to mock ControllerContext.ParentActionViewContext.
here is the code of my controller
[ChildActionOnly]
public ViewResult Menu()
{
string controller = ControllerContext.ParentActionViewContext.RouteData.Values["controller"].ToString();
string action = ControllerContext.ParentActionViewContext.RouteData.Values["action"].ToString();
List menuItems = new List();
...code to populate my list...
return View(menuItems);
}
What I want to accomplish is mock ParentActionViewContext in a test so i can pass whatever controller and action I want to do my simulations.
I can mock the RouteData of the ControllerContext, but I can’t fake the one of the parent controller.
Maybe I’m missing something obviuos.
Any help is greatly appreciated.
You’re not missing anything obvious. You already discovered that the ParentActionViewContext property of the ControllerContext is not marked virtual and therefore, un-mockable. You can however, accomplish what you want by creating a ViewContext object with the values you want, adding that object to the RouteData.DataTokens dictionary with the key “ParentActionViewContext.”
You can view the source code to the ControllerContext class and the implementation of the ParentActionViewContext property at http://bit.ly/ku8vR4.
Here’s how I implemented this in my test:
Hope this helps!
Michael Ibarra