Ошибка при использовании MVCContrib TestHelper - PullRequest
3 голосов
/ 05 июня 2010

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

Я реализовал методы так же, как показано в посте, и первые три работают правильно. Четвертый (HomeController_Delete_Action_Handler_Should_Redirect_If_Model_Successfully_Delete) выдает эту ошибку: Не удалось найти параметр с именем 'controller' в коллекции значений в результате.

Если я изменю код на:

actual 
    .AssertActionRedirect() 
    .ToAction("Index");

это работает правильно, но мне не нравится там "волшебная строка", и я предпочитаю использовать лямбда-метод, который использовал другой плакат.

Мой метод контроллера выглядит следующим образом:

    [HttpPost]
    public ActionResult Delete(State model)
    {
        try
        {
            if( model == null )
            {
                return View( model );
            }

            _stateService.Delete( model );

            return RedirectToAction("Index");
        }
        catch
        {
            return View( model );
        }
    }

Что я делаю не так?

1 Ответ

9 голосов
/ 05 июня 2010

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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...