2013-08-31 67 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文件夹,而不是与文件调用它,我不知道。