2012-05-05 4 views
6

Colpire un po 'di un ostacolo quando si tenta di testare un modulo Nancy da un progetto di test. Il mio codice di prova sembra piuttosto standard:Il progetto di test di Nancy non riesce a trovare le viste

[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); 
} 

Non riesco a individuare l'eccezione di visualizzazione quando il mio modulo tenta di eseguire il rendering della vista. Se eseguo normalmente il progetto, il modulo trova la vista. È solo quando viene invocato dal progetto di test che il modulo non riesce a trovarlo.

risposta

8

Il problema è che le viste non chiudono da nessuna parte il progetto di test, e dal momento che IRootPathProvider punta nel posto sbagliato, non riesce a trovarle. Due modi per aggirare questo è usare il ConfigurableBootstrapper (che è più o meno la stessa di quella di default, ma la possibilità di ignorare cose quando inizializzato) e dirgli di utilizzare il provider di percorso principale personalizzato

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

Dovresti quindi implementare public class CustomRootPathProvider : IRootPathProvider e indirizzarlo nel posto giusto.

La seconda soluzione potrebbe essere quella di impostare le vostre opinioni per copiare sempre nella directory di output, credo che dovrebbe anche risolvere

+1

Si noti inoltre che è necessario avere il giusto motore di visualizzazione installata nel progetto di test. le viste cshtml non verranno trovate senza, ad esempio, il motore di visualizzazione Razor installato. – theDmi

+2

Dai anche un'occhiata a questa bella implementazione di IRootPathProvider: http://www.jefclaes.be/2012/06/making-my-first-nancyfx-test-pass.html –

+0

Impostando la mia vista su "Copia sempre" I è stato in grado di fare un semplice test pass. Non è necessario nemmeno implementare un provider di percorsi root. Grazie! – dimiguel