log4js-node/test/tap/configuration-test.js
2023-02-20 13:31:02 +08:00

109 lines
2.6 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: realFS.realpath, // fs-extra looks for this
ReadStream: realFS.ReadStream, // need to define these, because graceful-fs uses them
WriteStream: realFS.WriteStream,
read: realFS.read,
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,
},
};
if (typeof done === 'function') {
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);
t.notOk(log4js.isConfigured(), 'should not have configured');
log4js.getLogger('test-logger');
t.ok(log4js.isConfigured(), 'should be configured');
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();
});