Как я могу проверить разрешение маршрута / действия URL с помощью строки запроса?

StackOverflow https://stackoverflow.com/questions/2906751

Вопрос

Я пытаюсь использовать код, такой как следующие тесты в моих модулях,

/* 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 Параметры будут инициализированы с соответствующими значениями из маршрута.

Другие советы

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top