2012-05-05 34 views
6

尝试从测试项目测试Nancy模块时遇到了一些绊脚石。我测试的代码看起来非常标准:南希测试项目找不到视图

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

我得到一个无法当我的模块试图渲染视图定位视图例外。如果我正常运行项目,模块将查找该视图。只有在从测试项目中调用时,模块才能找到它。

回答

8

问题是视图没有关闭你的测试项目,因为IRootPathProvider指向错误的地方,所以找不到它们。两种方法来解决这个问题是使用ConfigurableBootstrapper(这或多或少是一样的默认之一,但覆盖的东西初始化时的可能性),并告诉它使用自定义的根路径提供

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

然后,您将实施public class CustomRootPathProvider : IRootPathProvider并将其指向正确的位置。

第二个解决办法是设置你的观点总是复制到输出目录,我认为也应该解决它

+1

另外请注意,您必须安装在测试项目中的右视图引擎。例如,如果未安装Razor视图引擎,则不会找到cshtml视图。 – theDmi

+2

另外看看IRootPathProvider的这个不错的实现:http://www.jefclaes.be/2012/06/making-my-first-nancyfx-test-pass.html –

+0

通过将我的视图设置为“Always Copy”I能够做出简单的测试通过。不需要甚至实现根路径提供者。谢谢! – dimiguel