Вопрос

Пытаясь внедрить второй ответ на Предыдущий вопрос, Я получаю ошибку.

Я внедрил методы, как показывают сообщение, и первые три работают должным образом. Четвертый (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());
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top