Модульное тестирование помощников / просмотров MVC3 Razor без строк - PullRequest
9 голосов
/ 29 января 2011

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

Я видел несколько примеров, когда Razor-представления могут быть скомпилированы в сборку и преобразованы в строку. Проблема в том, что он отображается как строка, поэтому мне остается выполнять поиск по строке!

Вот что я пытаюсь сделать.

  1. Создание помощника Razor
  2. Помощник по компиляции
  3. Запустить скомпилированный помощник, передав в нем ViewModel
  4. Получите вывод помощника в виде некой HTML / XML / древовидной структуры

Причина, по которой я хочу это сделать, заключается в том, что я могу проверять определенные части вывода. Помощник, скорее всего, выплюнет HTML, который включает в себя различные выходные ганк. Что я хочу сделать, это посмотреть, есть ли флажок с определенным значением (например). Если вы видели тесты Selenium, это похоже на то, что я хотел бы сделать, за исключением тестов, управляемых сервером.

Есть ли какой-нибудь способ получить скомпилированные представления Razor (или другого движка представления), чтобы испускать что-то кроме строк?

Ответы [ 4 ]

4 голосов
/ 18 февраля 2011

Короткий ответ - нет, потому что цель двигателей представления в жизни состоит в том, чтобы выплевывать строки. Синтаксический анализ этих строк в XML-документе - это способ придать им небольшую структуру, как предложил @ Craig-M. Но вы должны спросить себя, что вы действительно тестируете. Если ваше представление компилируется и генерирует какой-то HTML-код, с тем, что он сгенерировал, могут быть три проблемы:

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

Последний вариант было бы очень неплохо проверить, но почему бы не проверить его в модульных тестах javascript? Проверьте популярные комплекты модульных тестов javascript, такие как JsUnit, FireUnit, QUnit и т. Д. Они все справятся с задачей гораздо лучше, чем вы могли бы разобрать вывод Razor.

Я думаю, что значение, присвоенное флажку, вероятно, будет проверено при тестировании контроллера. Но если использовать ваш пример, тестирование значения вашего флажка может быть $ ('# theCheck'). Val () == 'the value'. И вы можете запустить их на веб-сайте, работающем с репозиториями или сервисами, внедренными в зависимости, для управления такими вещами, как «ценность».

Просто мысль.

1 голос
/ 09 марта 2011

Как насчет рендеринга ваших просмотров в html и последующей отправки этого html в библиотеку HtmlAgility ? Таким образом, вы можете легко перемещаться по HTML. Я не думаю, что есть какой-то способ сделать это с самим MVC.

1 голос
/ 16 февраля 2011

Один из способов сделать это - проанализировать строку html в XDocument и вернуть ее вашей сборке.Затем вы можете выполнить запрос с LINQ в ваших тестах.

Редактировать: Я тоже пытаюсь выяснить стратегию тестирования Razor.Мне было бы интересно узнать, как заставить помощника работать.До сих пор я рисовал пробел в их рендеринге в строки вне MVC-фреймворка.

0 голосов
/ 01 мая 2012

Похоже, у Microsoft есть свой собственный ответ о том, как генерировать HTML из представлений для целей модульного тестирования .

...