I came across an issue when I was testing my HTML Helper. Basically I\'m creating a grid with loads of rows, columns and different types of data in it. In the header there i
You can just use this overload:
var imgPath = VirtualPathUtility.ToAbsolute("~/Images/SortingArrowUp.png",
context.Request.ApplicationPath);
This is what UrlHelper.GenerateContentUrl
uses internally, and you only need to mock ApplicationPath
.
The correct way is to call UrlHelper.GenerateContentUrl
instead of VirtualPathUtility
. In your helper code you would do something like this:
MvcHtmlString MyHelper(this HtmlHelper helper, ...) {
// other code
var imgPath = UrlHelper.GenerateContentUrl("~/Images/SortingArrowUp.png",
helper.ViewContext.HttpContext);
// other code
}
When unit testing you will have to pass in correctly mocked context objects. You need to mock HttpContext.Request.ApplicationPath
- return some dummy app path, HttpContext.Response.ApplyAppPathModifier()
- do nothing, HttpContext.Request.ServerVariables
- return null, HttpContext.Request.Path
and HttpContext.Request.RawUrl
- return some value that makes sense.