mocha fs.existsSync总是失败

时间:2013-08-31 01:09:08

标签: node.js mocha fs

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

这是我的Mocha测试脚本:

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

6 个答案:

答案 0 :(得分:2)

目前的accepted self-answer's解释不足。它说:

  

很明显,fs会查看项目的根目录,即package.json文件夹,而不是对调用它的文件进行处理,我不知道。

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

混淆可能来自模块系统如何处理相对路径。具有相对路径的模块名称将相对于当前文件的__dirname进行解释。这可能是与process.cwd()不同的值。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我相信您正在寻找 __ dirname ,请尝试将其添加到文件名中。

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

答案 3 :(得分:0)

我跟着@jjm和他对该计划的建议。记录它认为文件所在的位置后,结果发现它正在查找文件夹" logger",而不是" logger / test"很明显,fs会查看项目的根目录,即package.json文件夹,而不是对调用它的文件进行处理,我不知道。

答案 4 :(得分:-1)

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

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

答案 5 :(得分:-1)

这对我有用:

describe("Logger", function () {
    it("Creates a file", function (done) {
        logger.startup();
        console.log(logger.getFilename());
        fs.readFile(logger.getFilename(), done);
    });
});