2013-08-31 98 views
1

我試圖檢查一個文件是否存在於我的摩卡測試中。我知道這個文件存在於測試文件夾中(爲了簡單起見,我將它放在那裏),但我試着讓它起作用。但不管我做什麼,fs.existsSync總是失敗。 Logger.startup()創建文件。 Logger.getFilename()返回一個值,如5-17-30-2013.log。我是摩卡新手,所以如果我犯了一個經典失誤,我不知道。據我所知,我正在同步使用摩卡。感謝所有的幫助。摩卡fs.existsSync始終失敗

這裏是我的摩卡測試腳本:

var logger = require('../logger'); 
var fs = require('fs'); 

describe("Logger", function() { 
    it("Creates a file", function() { 
     logger.startup(); 
     console.log(logger.getFilename()); 
     if (!fs.existsSync(logger.getFilename())) { 
      throw ("Logging File Does Not Exist"); 
     } 
    }) 
}) 
+1

比下面的答案更好,請嘗試使用require('path')。resolve(logger.getFilename())。 path.resolve返回給定(可能)相對文件名的絕對路徑。 – jjm

+0

現在它正在加載一個文件在同一目錄(所以我需要的是電影文件名),但我確實嘗試了一段時間的絕對路徑也沒有成功。另外,作爲一個說明,我可以嘗試通過在fs exists sync調用中預先添加「test /」來檢查文件是否完全從腳本記錄器中存在(但不是在摩卡中) –

+0

腳本位於相同的目錄中並不意味着所有你需要的是文件名。在具有問題的腳本中執行此操作: console.log('ls -l',path.resolve(logger.getFilename())); 它將打印出類似「ls -l /Users/jon/stuff/fn.txt」的內容。 在shell中,運行打印的行。現在你知道文件是否存在。 – jjm

回答

2

當前accepted self-answer's解釋達不到。它說:

apearently fs看着項目的根,package.json文件夾,而不是相關的文件調用它,我不知道。

當然,但它不是偶然或fs模塊的怪癖。 fs模塊使用process.cwd()來解釋傳遞給它的相對路徑。除非用process.chdir()更改,否則process.cwd()是當前進程已啓動的目錄。由於mocha通常是從項目的根目錄啓動的,因此在mocha的過程中,process.cwd()通常會成爲項目的根。如果mocha從其他目錄啓動,則process.cwd()將具有不同的值。

混淆可能來自模塊系統處理相對路徑的方式。具有相對路徑的模塊名稱將被解釋爲相對於當前文件的__dirname。這可能與process.cwd()不同。

0

嘗試使用process.cwd()確定工作目錄fs.exists從

+0

該文件夾defeniatly存在,請參閱我上面的評論瞭解更多詳情。 –

0

我跟着@jjm和他的計劃的建議。在記錄了它認爲該文件的位置後,結果發現它正在文件夾「logger」中查找,而不是「logger/test」。顯然,fs查看項目的根目錄package.json文件夾,而不是與文件調用它,我不知道。