MVC Preview 5 - Визуализация представления строки для тестирования - PullRequest
8 голосов
/ 22 сентября 2008

Я читал пост Брэда Уилсона (http://bradwilson.typepad.com/blog/2008/08/partial-renderi.html) о новых изменениях ViewEngine в MVC Preview 5 и думал, что было бы здорово иметь возможность визуализировать представление в строку для использования в тестах. Я получаю Из статьи создается впечатление, что этого можно достичь, но не могу понять, как это сделать.

Я полагаю, что это позволило бы нам покончить с некоторыми из наших тестов WatIn (которые являются медленными и ненадежными), поскольку это позволило бы нам проверять, что представление правильно отображалось, просто проверяя строку на наличие ожидаемых значений / текста.

Кто-нибудь реализовал что-то подобное?

Ответы [ 3 ]

5 голосов
/ 22 сентября 2008

Это сложно. Вам нужно установить для свойства Response.Filter настраиваемый класс потока, который вы реализуете. Проект MVC Contrib на самом деле имеет примеры этого. Я бы там ковырялся.

1 голос
/ 24 июня 2015

Я думаю, вот что вам нужно. Функция RenderPartialToString вернет контроллер в виде строки. Я получаю это от здесь .

public static string RenderPartialToString(string controlName, object viewData)
{
     ViewDataDictionary vd = new ViewDataDictionary(viewData);
     ViewPage vp = new ViewPage { ViewData = vd };
     Control control = vp.LoadControl(controlName);

     vp.Controls.Add(control);

     StringBuilder sb = new StringBuilder();
     using (StringWriter sw = new StringWriter(sb))
     {
         using (HtmlTextWriter tw = new HtmlTextWriter(sw))
         {
             vp.RenderControl(tw);
         }
     }

     return sb.ToString();
}
0 голосов
/ 15 ноября 2008

Кроме того, тестирование может быть полезно для таких компонентов, как конвертеры HTML в PDF. Эти компоненты обычно используют 2 способа преобразования.

  • Передача URL-адреса методу преобразования
  • Передача содержимого HTML (и вы можете дополнительно указать baseUrl для разрешения виртуальных путей)

Я использую фильтр авторизации внутри контроллера, поэтому, если я перенаправляю на URL-адрес, отображаемый HTML-код является страницей входа (я использую пользовательскую аутентификацию).

Если я использую Server.Execute (Url) для сохранения контекста, метод завершается ошибкой (HttpUnhandledException: Ошибка при выполнении дочернего запроса для /Template/Pdf/1.).

Итак, я попытался извлечь HTML из визуализированного ViewResult, но мне это не удалось.

...