Ошибка с использованием MVCContrib TestHelper
-
24-10-2019 - |
Вопрос
Пытаясь внедрить второй ответ на Предыдущий вопрос, Я получаю ошибку.
Я внедрил методы, как показывают сообщение, и первые три работают должным образом. Четвертый (homecontroller_delete_action_handler_should_redirect_if_model_successuly_delete) дает эту ошибку: не удалось найти параметр с именем «контроллером» в сборе значений результата.
Если я изменю код на:
actual
.AssertActionRedirect()
.ToAction("Index");
Это работает правильно, но мне не нравится «волшебная строка», и я предпочитаю использовать метод Lambda, который использовал другой плакат.
Мой метод контроллера выглядит так:
[HttpPost]
public ActionResult Delete(State model)
{
try
{
if( model == null )
{
return View( model );
}
_stateService.Delete( model );
return RedirectToAction("Index");
}
catch
{
return View( model );
}
}
Что я делаю не так?
Решение
MVCContrib.TestHelper
Ожидается, что вы указате имя контроллера при перенаправлении в Delete
действие:
return RedirectToAction("Index", "Home");
Тогда вы сможете использовать твердо напечатанное утверждение:
actual
.AssertActionRedirect()
.ToAction<HomeController>(c => c.Index());
Еще одна альтернатива - написать свой собственный ToActionCustom
Метод расширения:
public static class TestHelperExtensions
{
public static RedirectToRouteResult ToActionCustom<TController>(
this RedirectToRouteResult result,
Expression<Action<TController>> action
) where TController : IController
{
var body = (MethodCallExpression)action.Body;
var name = body.Method.Name;
return result.ToAction(name);
}
}
что позволило бы вам оставить перенаправление как есть:
return RedirectToAction("Index");
и проверить результат таким образом:
actual
.AssertActionRedirect()
.ToActionCustom<HomeController>(c => c.Index());