Files

109 lines
2.8 KiB
JavaScript

const expect = require('chai').expect;
const loglevel = require('loglevel');
const other = require('loglevel-plugin-mock');
const sinon = require('sinon');
const prefix = require('../lib/loglevel-plugin-prefix');
const spy = sinon.spy();
loglevel.enableAll();
describe('API', () => {
it('Methods', () => {
expect(prefix).to.have.property('apply').with.be.a('function');
expect(prefix).to.have.property('reg').with.be.a('function');
expect(prefix).not.to.have.property('noConflict');
});
it('Reg: empty arguments', () => {
expect(prefix.reg).to.throw(TypeError, 'Argument is not a root logger');
});
it('Reg: incorrect argument', () => {
expect(() => prefix.reg('logger')).to.throw(TypeError, 'Argument is not a root logger');
});
it('Apply: empty arguments', () => {
expect(prefix.apply).to.throw(TypeError, 'Argument is not a logger');
});
it('Apply: incorrect argument', () => {
expect(() => prefix.apply('logger')).to.throw(TypeError, 'Argument is not a logger');
});
});
describe('Prefix', () => {
other.apply(loglevel, { method: spy });
beforeEach(() => {
spy.reset();
});
it('Root applying', () => {
expect(() => prefix.apply(loglevel)).to.not.throw();
});
it('Root reapplyng', () => {
prefix.apply(loglevel, { template: '%l (%n):' });
loglevel.info('test');
expect(spy.calledWith('INFO (root): test')).to.be.true;
});
it('Format', () => {
prefix.apply(loglevel, {
format: (level, logger) => `${level} (${logger}):`
});
loglevel.info('test');
expect(spy.calledWith('INFO (root): test')).to.be.true;
});
it('Unformat', () => {
prefix.apply(loglevel, { template: '%l:' });
loglevel.info('test');
expect(spy.calledWith('INFO: test')).to.be.true;
});
it('The prefix must be combined with the first argument, if it is a string', () => {
prefix.apply(loglevel, { template: '%l:' });
loglevel.info('foo %s', 'bar');
expect(spy.calledWith('INFO: foo %s', 'bar')).to.be.true;
});
it('All methods of the previous plugin should be called', () => {
prefix.apply(loglevel);
// for warn in apply
spy.reset();
loglevel.trace();
loglevel.debug();
loglevel.info();
loglevel.warn();
loglevel.error();
expect(spy.callCount).to.equal(5);
});
it('Child applying', () => {
const child = loglevel.getLogger('child');
prefix.apply(child, { template: '%l (%n):' });
child.info('test');
expect(spy.calledWith('INFO (child): test')).to.be.true;
});
it('Child reapplyng', () => {
const child = loglevel.getLogger('child');
prefix.apply(child, {
levelFormatter(level) {
return level;
}
});
child.info('test');
expect(spy.calledWith('info (child): test')).to.be.true;
});
});