Как проверить HtmlHelpers, которые вызывают Partial? - PullRequest
0 голосов
/ 29 сентября 2011

Я смотрел на этот вопрос Stackoverflow и получил ответ.Все работает отлично, пока я не вызову HtmlHelper.Partial в своем вспомогательном методе, который указан ниже.Я знаю, что это может быть не самый лучший код, но пока я не смогу реорганизовать большую часть приложения.Выдает ошибку:

Предыдущий метод 'ViewContext.get_TempData ();'для возврата требуется возвращаемое значение или исключение.

Я что-то пропускаю, насмешливо или есть лучший способ визуализации пользовательского элемента управления?

Редактировать ОКЯ что-то пропустил, я не вызывал mocks.Replay ().Теперь есть еще одна ошибка, которая требует что-то с именем контроллера в routeData ... progress.

Edit # 2 Уточнение Я пытаюсь смоделировать вызов HtmlHelper.Partial (частичный путь, модель)Я просто хочу, чтобы это возвращало любой частичный путь, который я посылаю, я думаю, или, по крайней мере, не взрыв.Я нашел эту страницу http://andrevianna.com/blog/?p=8, которая была очень полезна, и я почти все заработал.Это также было полезно http://farm -fresh-code.blogspot.com / 2009/10 / mocking-htmlhelper-class-with.html

 public static string RenderRateDetails(this HtmlHelper html, string partialPath, RatesViewData model, RateDetailType type)
    {

        switch (type)
        {
            case RateDetailType.AR:
                if (model.ExistingRateDetailAR != null)
                    return html.Partial(partialPath, model).ToString();
                break;
            case RateDetailType.AP:
                if (model.ExistingRateDetail != null)
                    return html.Partial(partialPath, model).ToString();
                break;

        }

        return string.Empty;
    }

Ответы [ 2 ]

1 голос
/ 03 октября 2011

Я думаю, что пример, приведенный в разделе «Свежий код фермы», - правильный путь, вы не можете напрямую смоделировать HtmlHelper, но вы можете создать экземпляр, где все его зависимости будут смоделированы.

Когда вы вызываете код html.Partial(partialPath, model).ToString(), HtmlHelper вызывает свойства и методы для зависимостей, которые вы высмеивали, и вы получаете ошибки, если они не возвращают разумные значения по умолчанию.

В этом случае похоже, что свойство TemplateData смоделированного объекта ViewContext было вызвано, и я полагаю, что оно вернуло значение null, следовательно:

Previous method 'ViewContext.get_TempData();' requires a return value or an exception to throw.

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

Это может сэкономить вам время, чтобы взглянуть на исходный код MVC, чтобы увидеть, что вызывается в методе Partial. Вы можете получить это здесь http://aspnet.codeplex.com/releases/view/58781.

EDIT

КСТАТИ. Свойство TempData возвращает System.Web.Mvc.TempDataDictionary. Насмешка над свойством вернуть пустой экземпляр одного из них должна решить непосредственную проблему.

0 голосов
/ 29 сентября 2011

Рассматривали ли вы использование шаблонов отображения и редактора для своих пользовательских элементов управления вместо расширения HtmlHelper?

В ранних версиях MVC я часто делал то же самое, но почти полностью перешел на использованиешаблоны сейчас.

...