我正在尝试检查我的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");
}
})
})
答案 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 ,请尝试将其添加到文件名中。
答案 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);
});
});