2013-12-13 15 views
0

首先我知道问题是什么,我只是不了解Nancy,知道如何解决问题。如何显式指定Nancy视图的位置?

作为appharbor构建过程的一部分,我有单元测试失败。当NCrunch执行它时,同样的测试也会失败。但是,当由VS2012执行它工作正常。

测试看起来是这样的:

[Test] 
public void Get_Root_Should_Return_Status_OK() 
{ 
    // Given 
    var browser = new Browser(new Bootstrapper()); 

    // When 
    var result = browser.Get("/"); 

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

HomeModule部分处理"/"路线是这样的:

Get["/"] = _ => View["home.sshtml"]; 

home.sshtml是在浏览文件夹。

如果我替换上面:

Get["/"] = _ => "Hello World!; 

然后测试走向绿色。

所以很明显,问题是,当在NCrunch和appharbor中运行测试时,无法找到home.sshtml文件。

我该如何明确地告诉南希文件在哪里?

PS视图文件正被复制到输出目录。

PPS我也尝试明确告诉南希哪里的意见是像,这也不管用。

protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines) 
{ 
    var directoryInfo = new FileInfo(Assembly.GetExecutingAssembly().Location).Directory; 
    if (directoryInfo != null) 
     Environment.CurrentDirectory = directoryInfo.FullName; 
    Conventions.ViewLocationConventions.Add((viewName, model, viewLocationContext) => String.Concat("Views/", viewName)); 
} 
+0

我认为Bootstrapper是您的主项目中的引导程序?有没有什么东西可以打破它?您是使用sshtml文件作为嵌入式资源还是只是正常使用?你不应该需要ApplicationStartup中的mod,所以我确信有一些简单的事情发生。通过https://jabbr.net/#/rooms/nancyfx弹出 – Jon

+0

我已将视图嵌入到程序集中。现在通行证测试无处不在。 –

回答

1

问题是由于NCrunch在编译和复制bin目录以运行测试时不会将视图复制到输出目录。

你需要做的是设置的意见,始终复制的内容,然后在你的单元测试项目中添加一个IRootPathProvider实现:

public class StaticPathProvider : IRootPathProvider 
{ 
    public static string Path { get; set; } 

    public string GetRootPath() 
    { 
     return Path; 
    } 
} 

(不完全确定的道路上,我不记得了,认为它只是执行程序集的地方)

并将其注册到您的引导程序中进行单元测试。

var browserParser = new Browser(with => 
{ 
    ... 
    with.RootPathProvider<StaticPathProvider>(); 
    ... 
}); 

坏处就是进行部署时,你需要从/bin目录中删除视图目录。


另一种方法是做你已经做的事,嵌入你的观点。

相关问题