node.js - mocha fs.existsSync 总是失败

标签 node.js mocha.js fs

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

这是我的 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");
        }
    })
})

最佳答案

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

Apearently fs looks at the root of the project, the package.json folder, and not realative to the file calling it, which I did not know.

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

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

关于node.js - mocha fs.existsSync 总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18543476/

相关文章:

node.js - 如何将 process.env.NODE_ENV 从 Gulp 传递到 Webpack?

javascript - Jest 期望模拟函数被调用

javascript - 在nodejs中创建HTTPS api并测试

node.js - Mocha 不显示 chai 期望错误消息

vue.js - 带 Electron 的vuejs,不能使用fs

reactjs - React Js需要 'fs'

node.js - 在 macOS Bigsur 上出现 `npm install` 时出现 Node-gyp 错误

javascript - 从Node js中的事件Socket重新创建HTTP请求和响应

node.js - 无法获取 Node 或 ts-node/register 来再使用 es2020(flatMap 不是函数)

javascript - 使用 node.js 写入二进制数据的问题