摩卡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