Я сталкиваюсь со странным поведением при модульном тестировании контроллера.
Я использую некоторые методы расширения для построения Url.Action, и все работает хорошо при запуске кода в производстве, но модульное тестирование не проходит.
На самом деле мой пользовательский помощник Url.Action использует метод:
System.Web.Routing.RouteCollection.GetVirtualPathData
точная строка:
VirtualPathData localizedPathData =
HtmlExtensions.GetVirtualPathData (newRouteTable,
Url.RequestContext, routingValues);
строка URL =
localizedPathData.VirtualPath.ToLower ();
Проблема в том, что при модульном тестировании localizedPathData.VirtualPath представляет собой пустую строку вместо URL-адреса для маршрута, как в рабочем коде. RouingValues содержит три ключа «area», «controller», «action» со связанными значениями с контроллером / action, для которых я хотел бы создать URL-адрес.
Что странно, localizedPathData.Route свойство содержит правильный маршрут ! Так почему localizedPathData.VirtualPath является пустой строкой?
Я пытался с GetVirtualPathForArea, но результат тот же.
Я издеваюсь с MvcContrib TestControllerBuilder.
Пример кода здесь:
// Arrange
var loginInput = new LoginInput { EmailAddress = "test@test.fr", Password = "test", RememberMe = false };
new RouteConfigurator().RegisterRoutes(() => new ResumeAreaRegistration().RegisterArea(new AreaRegistrationContext("Resume", RouteTable.Routes)));
var testControllerBuilder = new TestControllerBuilder();
var loginController = testControllerBuilder.CreateController<LoginController>();
loginController.Url = new UrlHelper(new RequestContext(loginController.HttpContext, new RouteData()), RouteTable.Routes);
loginController.Url.RequestContext.RouteData.Values.Add("area","Resume");
loginController.Url.RequestContext.RouteData.Values.Add("culture","en-US");
const string defaultUrl = "/Dashboard";
// act
var result = loginController.Index(loginInput, null);
// assert
result.ShouldNotBeNull();
result.AssertHttpRedirect().Url.ShouldBe(defaultUrl);
Может быть, я что-то упустил? Что-то, о чем я забыл?
Заранее благодарю за помощь.