Бит нуб с тестированием так, пожалуйста, медведь со мной,Url.Action становится нулевой, когда в JSON строку
У меня есть контроллер, который возвращает JsonResult, который содержит строку, вычисленную Url.Action так:
public ActionResult GetResult(SomeModel model)
{
if (ModelState.IsValid)
{
return Json(new { redirectTo = Url.Action("Index", "Profile") });
}
}
И приложение работает отлично, когда я использую этот результат с помощью jQuery.
Однако во время моего модульного тестирования у меня возникают проблемы, потому что, когда я проверяю содержимое строки Json, значение redirectTo оказывается «нулевым», даже если оно не является нулевым в самом приложении.
Мой метод тестирования выглядит немного как это:
[Test]
public void GetResult_Success()
{
var result = controller.GetResult(new SomeModel());
Assert.IsNotNull(result);
Assert.IsInstanceOf<JsonResult>(result);
var jsonResult = result as JsonResult;
var jsonObject = JsonConvert.DeserializeAnonymousType(new JavaScriptSerializer().Serialize(jsonResult.Data), new
{
redirectTo = string.Empty
});
Assert.AreEqual("Profile/Index", jsonObject.redirectTo);
}
Это терпит неудачу, потому что jsonObject.redirectTo является недействительным. Если в моем контроллере я изменяю Url.Action в «Профиль/Индекс», тест проходит. Однако Url.Action («Индекс», «Профиль») терпит неудачу, поскольку он становится нулевым только при модульном тестировании.
Если я попытаюсь настроить значения маршрута в настройке контекста для тестов, он жалуется, что они уже зарегистрированы. Я использую Moq. Любая идея, что мне нужно настроить? Большое спасибо заранее
Это может быть то, что вы ищете? Я могу опубликовать более подробный ответ, если это так: http://codeswordsman.wordpress.com/2011/07/22/unit-testing-controllers-that-call-url-action-and-verify-correct-url/ –
Эй, почти там! Теперь я получаю: Ожидаемая длина строки 13 но 8. Строки различаются по индексу 0. ОЖИДАЕТСЯ: «Профиль/Index» Но было: «/ Профиль» Так выглядит, как будто маршрутизация отличается от того, что одно из приложений (что очень странно, поскольку я использую одну и ту же таблицу маршрутизации). По крайней мере, это не пусто – Nick
Ах, нет! Мой плохой, я забыл, что «индекс» исчезает, потому что это страница по умолчанию. Это сработало, спасибо – Nick