log4js-node/test/tap/configuration-test.js
2019-08-01 16:57:32 +10:00

103 lines
2.4 KiB
JavaScript

const { test } = require("tap");
const sandbox = require("@log4js-node/sandboxed-module");
const realFS = require("fs");
const modulePath = "some/path/to/mylog4js.json";
const pathsChecked = [];
let fakeFS = {};
let dependencies;
let fileRead;
test("log4js configure", batch => {
batch.beforeEach(done => {
fileRead = 0;
fakeFS = {
realpath: () => {}, // fs-extra looks for this
ReadStream: realFS.ReadStream, // need to define these, because graceful-fs uses them
WriteStream: realFS.WriteStream,
closeSync: () => {},
config: {
appenders: {
console: {
type: "console",
layout: { type: "messagePassThrough" }
}
},
categories: {
default: {
appenders: ["console"],
level: "INFO"
}
}
},
readdirSync: dir => require("fs").readdirSync(dir),
readFileSync: (file, encoding) => {
fileRead += 1;
batch.type(file, "string");
batch.equal(file, modulePath);
batch.equal(encoding, "utf8");
return JSON.stringify(fakeFS.config);
},
statSync: path => {
pathsChecked.push(path);
if (path === modulePath) {
return { mtime: new Date() };
}
throw new Error("no such file");
}
};
dependencies = {
requires: {
fs: fakeFS
}
};
done();
});
batch.test(
"when configuration file loaded via LOG4JS_CONFIG env variable",
t => {
process.env.LOG4JS_CONFIG = "some/path/to/mylog4js.json";
const log4js = sandbox.require("../../lib/log4js", dependencies);
log4js.getLogger("test-logger");
t.equal(fileRead, 1, "should load the specified local config file");
delete process.env.LOG4JS_CONFIG;
t.end();
}
);
batch.test(
"when configuration is set via configure() method call, return the log4js object",
t => {
const log4js = sandbox
.require("../../lib/log4js", dependencies)
.configure(fakeFS.config);
t.type(
log4js,
"object",
"Configure method call should return the log4js object!"
);
const log = log4js.getLogger("daemon");
t.type(
log,
"object",
"log4js object, returned by configure(...) method should be able to create log object."
);
t.type(log.info, "function");
t.end();
}
);
batch.end();
});