2015-10-30 20 views
5

Quando Scott Guthrie first blogged on Razor, ha scrittoCome unità di testare un rasoio-view

La nuova implementazione vista del motore sosterrà la capacità di vista di unit test (senza la necessità di un controller o web-server, e può essere ospitati in qualsiasi progetto di test unitario - non è richiesto alcun dominio app speciale).

Tuttavia, non riesco a trovare altre dichiarazioni (o esempi) relativi alla testabilità del rasoio. Ci sono dei puntatori all'utilizzo di CodelanguageServie o RazorGenerator o some self-made renderer - non di quelli che chiamerei "di progettazione".

Attualmente è possibile testare unitamente una vista del rasoio in modo semplice? (In un MVC-applicazioni asp.net, cioè. Porta Ie NancyFx testabilità in esso è nancy.testing-package.)

(e attualmente non mi interessa if views should be tested or not.)

So che ci sono loads of questions like this one , ma la maggior parte di loro sono piuttosto vecchio ...

risposta

0

quello che penso è possibile testare unità di qualsiasi Razor visualizzare come segue:

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(); 

Dopo questo, è possibile analizzare il codice HTML per verificare il contenuto con la specifica .

+0

Questo suggerimento richiede ancora un controller che includa il contesto del controller con varie proprietà fornite. Mentre possono essere in qualche modo derisi, questo codice - al di fuori di un controller in esecuzione con un HttpContext.Current valido - viene eseguito in un NRE (NullReferenceException) in 'System.Web.Compilation.BuildManager.GetCacheKeyFromVirtualPath (VirtualPath virtualPath, Boolean & keyFromVPP)' . Quindi la ricerca di un modo semplice per testare una vista, ad es. implementazione di qualcosa come 'RazorView.Render (string viewName, object model)', continua. Le viste/parziali non sembrano ancora testabili. – Manfred

Problemi correlati