2015-10-30 2 views
5

Когда Скотт Гатри first blogged on Razor, он написалКак блок-тестирование бритвы ракурса

Новой реализацию вид двигателя будет поддерживать способность взгляды модульного тестирования (без необходимости управления или веб-сервера, и может быть размещен в любом модульном тестовом проекте - не требуется специальный домен приложения).

Однако я не могу найти другого заявления (или примера) относительно проверки бритвы. Есть указатели на использование CodelanguageServie или RazorGenerator или some self-made renderer - без которых я бы назвал «по дизайну».

В настоящее время можно выполнить проверку бритвы простым способом? (В ASP.NET MVC-приложения, то есть. Т.е. NancyFx приносит проверяемость в это nancy.testing-пакет.)

(И в настоящее время я не забочусь if views should be tested or not.)

Я знаю, что есть loads of questions like this one , но большинство из них довольно старые ...

ответ

0

То, что я думаю, что вы можете проверить любой блок Razor смотреть, как следующее:

ViewResult v = View("~/Views/Home/Index.cshtml"); 
      if (string.IsNullOrEmpty(v.ViewName)) 
       v.ViewName = RouteData.GetRequiredString("action"); 
      ViewEngineResult result = null; 
      StringBuilder sb = new StringBuilder(); 
      StringWriter textwriter = new StringWriter(sb); 
      HtmlTextWriter htmlwriter = new HtmlTextWriter(textwriter); 
      if (v.View == null) 
      { 
       result = new ViewEngineResult(new RazorView(ControllerContext,"~/Views/Home/Index.cshtml", null,false,null), new RazorViewEngine()); 
       v.View = result.View; 
      } 
      ViewContext viewContext = new ViewContext(ControllerContext, v.View, ViewData, TempData, htmlwriter); 
      v.View.Render(viewContext, htmlwriter); 
      string html = sb.ToString(); 

После этого, вы можете разобрать HTML для проверки содержимого со спецификацией ,

+0

Это предложение по-прежнему требует наличия контроллера, включающего в себя контекст контроллера с различными предоставленными свойствами. Хотя их можно в некоторой степени насмехаться, этот код - вне контроллера, работающего с допустимым HttpContext.Current, - запускается в NRE (исключение NullReferenceException) в 'System.Web.Compilation.BuildManager.GetCacheKeyFromVirtualPath (VirtualPath virtualPath, Boolean & keyFromVPP)' , Таким образом, поиск простого способа проверки вида, например, реализация чего-то типа «RazorView.Render (string viewName, object model)» продолжается. Представления/частичные данные по-прежнему не проверяются. – Manfred

Смежные вопросы