2012-05-05 27 views
6

Tocó un poco un obstáculo al intentar probar un módulo de Nancy de un proyecto de prueba. Mi código de prueba es bastante estándar:Proyecto de prueba de Nancy no puede encontrar vistas

[TestMethod] 
public void Should_return_status_ok_when_route_exists() 
{ 
    // Given 
    var bootstrapper = new DefaultNancyBootstrapper(); 
    var browser = new Browser(bootstrapper); 

    // When 
    var result = browser.Get("/", with => 
    { 
     with.HttpRequest(); 
    }); 

    // Then 
    Assert.AreEqual(result.StatusCode, HttpStatusCode.OK); 
} 

consigo un incapaz de localizar vista excepción cuando mi módulo intenta renderizar la vista. Si ejecuto el proyecto normalmente, el módulo encuentra la vista. Solo cuando se invoca desde el proyecto de prueba, el módulo no puede encontrarlo.

Respuesta

8

El problema es que las vistas no están en ninguna parte cerca de su proyecto de prueba, y dado que IRootPathProvider apunta al lugar equivocado, no puede encontrarlas. Dos maneras de evitar esto es usar el ConfigurableBootstrapper (que es más o menos el mismo que el que viene por defecto, pero la posibilidad de anular cosas cuando inicializado) y que lo utilice el proveedor de ruta raíz de encargo

var bootstrapper = new ConfigurableBootstrapper(with => { 
    with.RootPathProvider<CustomRootPathProvider>(); 
}); 

Luego implementaría public class CustomRootPathProvider : IRootPathProvider y lo señalaría en el lugar correcto.

La segunda solución sería establecer sus puntos de vista para copiar siempre que el directorio de salida, creo que también hay que resolverlo

+1

También tenga en cuenta que es necesario tener la visión correcta del motor instalado en el proyecto de prueba. Las vistas cshtml no se encontrarán sin el motor Razor view instalado, por ejemplo. – theDmi

+2

También eche un vistazo a esta buena implementación de IRootPathProvider: http://www.jefclaes.be/2012/06/making-my-first-nancyfx-test-pass.html –

+0

Al configurar mi vista para "Copiar siempre" I fue capaz de hacer un pase de prueba simple. No es necesario incluso implementar un proveedor de ruta raíz. ¡Gracias! – dimiguel

Cuestiones relacionadas