Как я могу проверить разрешение маршрута / действия URL с помощью строки запроса?
-
04-10-2019 - |
Вопрос
Я пытаюсь использовать код, такой как следующие тесты в моих модулях,
/* Test setup code */
_routes = RouteTable.Routes;
MvcApplication.RegisterRoutes(_routes); //set up the routes as they would be in actual application
/* test code */
Expression<Func<SearchController, ActionResult>> actionFunc;
actionFunc = action => action.Results("x", 3, null);
RouteTestingExtensions.Route(
"~/Search/Results?searchText=x"
).ShouldMapTo<SearchController>(actionFunc);
Проблема в том, что это не удается «ожидаемые результаты были результатами? SearchText = X»
У кого-нибудь есть решение, которое позволит мне проверить, что URL-адрес (с строкой запроса) разрешается к правильному контроллеру, действию и аргументам?
FYI, у меня нет явного настройки маршрута в Global.Asax.cs, поскольку маршрут по умолчанию работает для фактического приложения - это просто не работает в этом тесте.
Решение
ИМХО имеет смысл установить тестирование только на заказ маршруты. Тестирование того, что параметры строки запросов будут переведены на аргументы действия контроллера не нужны и на самом деле не приносят никакого значения в ваше приложение. Эта работа выполняется связующим моделей по умолчанию и широко протестирована с помощью Microsoft (надеюсь).
Это сказал MVCContrib.TestHelper
Позволяет элегантно проверять пользовательские маршруты. Предположим, например, вы реализовали пейджинг в вашем приложении и определили пользовательский маршрут, чтобы иметь красивые URL для SEO:
routes.MapRoute(
"Custom",
"foo/{startPage}/{endPage}",
new
{
controller = "Search",
action = "Results",
}
);
И вот ассоциированный контроллер:
public class SearchController : Controller
{
public ActionResult Results(int startPage, int endPage)
{
return View();
}
}
Этот маршрут может быть проверен таким:
"~/foo/10/20".ShouldMapTo<SearchController>(c => c.Results(10, 20));
Это будет эффективно проверить, что контроллер по умолчанию Search
, действие по умолчанию Results
И что обоих startPage
а также endPage
Параметры будут инициализированы с соответствующими значениями из маршрута.
Другие советы
Возможно, эти статьи Фила Хаак помогут: