Я столкнулся с проблемой, когда тестировал свой HTML Helper. По сути, я создаю сетку с множеством строк, столбцов и различных типов данных. В заголовке также есть изображение, чтобы уведомить пользователя, по какому столбцу отсортированы данные. Однако, когда я пишу свой тест сейчас (слишком поздно, но лучше поздно, чем никогда ?!), я получаю эту ошибку: «~ / Images / SortingArrowUp.png» не может быть абсолютным, потому что путь к приложение неизвестно. "
var imgPath = VirtualPathUtility.ToAbsolute("~/Images/SortingArrowUp.png");
Как я могу решить эту проблему. Я могу понять, как это может быть проблемой во время теста, и изображение может быть недоступно и все такое, но каков правильный способ сделать это тогда?
Правильный способ - вызвать UrlHelper.GenerateContentUrl
вместо VirtualPathUtility
. В коде помощника вы сделаете примерно следующее:
MvcHtmlString MyHelper(this HtmlHelper helper, ...) {
// other code
var imgPath = UrlHelper.GenerateContentUrl("~/Images/SortingArrowUp.png",
helper.ViewContext.HttpContext);
// other code
}
При модульном тестировании вам нужно будет передавать корректно подмеченные объекты контекста. Вам нужно подражать HttpContext.Request.ApplicationPath
- возвращает какой-то фиктивный путь приложения, HttpContext.Response.ApplyAppPathModifier()
- ничего не делает, HttpContext. Request.ServerVariables
- возвращают null, HttpContext.Request.Path
и HttpContext.Request.RawUrl
- возвращают какое-то значение, которое имеет смысл.