2013-12-13 19 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目錄中刪除視圖目錄。


另一種方法是做你已經做的事,嵌入你的觀點。

相關問題