摩卡fs.existsSync总是失败

我正试图检查一个文件是否存在于我的摩卡testing中。 我知道这个文件存在于testing文件夹中(为了简单起见,我把它放在那里,而我试着让它工作)。 但是不pipe我做什么,fs.existsSync总是失败。 Logger.startup()创build文件。 Logger.getFilename()返回一个类似于5-17-30-2013.log的值。 我是摩卡新手,所以如果我犯了一个经典的错误,我不知道。 据我所知,我正在同步使用摩卡。 感谢所有的帮助。

这是我的摩卡testing脚本:

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

目前接受的自答的解释很短。 它说:

很明显,fs会查看项目的根目录,即package.json文件夹,而不是与调用它的文件相关联,这是我不知道的。

当然,但这不是fs模块的偶然或者怪诞。 fs模块使用process.cwd()来解释传递给它的相对path。 除非使用process.chdir()更改,否则process.cwd()是当前进程已启动的目录。 由于mocha通常是从项目的根部启动的,因此在mocha过程中, process.cwd()通常是项目的根。 如果mocha从其他目录启动,则process.cwd()将具有不同的值。

混淆可能来自模块系统处理相对path的方式。 具有相对path的模块名称将被解释为相对于当前文件的__dirname 。 这可能是一个不同于process.cwd()的值。

尝试使用process.cwd()来确定fs.exists正在运行的工作目录

我相信你正在寻找__dirname ,试图把它加到文件名。

文档: http : //nodejs.org/api/globals.html#globals_dirname

我跟随@jjm和他的计划的build议。 在logging了它认为该文件的位置之后,事实certificate它正在文件夹“logger”中查找,而不是“logger / test”。显然,fs查看项目的根目录package.json文件夹,而不是相对于文件调用它,我不知道。

你可以使用fs.open(filepath, 'r', callback);

http://nodejs.org/api/fs.html#fs_fs_open_path_flags_mode_callback