X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fstub-logger.js;h=c7ba5833091a65e2cf8c7d1840072ce956b6a18c;hb=HEAD;hp=c1a477919edc4123ac953b04ad92651533aa5943;hpb=5001ce3f7b9ba4fb13bdee4fa220635567c0f2a8;p=squeep-test-helper diff --git a/lib/stub-logger.js b/lib/stub-logger.js index c1a4779..aa053a9 100644 --- a/lib/stub-logger.js +++ b/lib/stub-logger.js @@ -1,34 +1,51 @@ 'use strict'; -const sinon = require('sinon'); // eslint-disable-line node/no-unpublished-require - -const nop = () => undefined; +const assert = require('node:assert'); class StubLogger { - constructor(verbose = false) { - const logger = (process.env.VERBOSE_TESTS || verbose) ? console : StubLogger._nullLogger; - Object.keys(StubLogger._nullLogger).forEach((level) => { - this[level] = logger[level]; // eslint-disable-line security/detect-object-injection - sinon.spy(this, level); - }); + constructor(sinon, verbose = false) { + assert.strictEqual(sinon?.constructor?.name, 'Sandbox', 'sinon dependency not recognized'); + this.sinon = sinon; + const logger = (process.env.VERBOSE_TESTS || verbose) ? console : this.constructor._nullLogger; + // eslint-disable-next-line security/detect-object-injection + this.constructor._levels.forEach((level) => this[level] = logger[level]); + this._spy(); } + /** + * Default log levels are nop. + * @returns {object} nop log levels + */ static get _nullLogger() { return { - error: nop, - warn: nop, - info: nop, - log: nop, - debug: nop, + error: () => undefined, + warn: () => undefined, + info: () => undefined, + log: () => undefined, + debug: () => undefined, }; } + /** + * Returns names of all log levels. + * @returns {string[]} list of log level names + */ static get _levels() { - return Object.keys(StubLogger._nullLogger); + return Object.keys(this._nullLogger); + } + + /** + * Install spies on all log levels. + */ + _spy() { + this.constructor._levels.forEach((level) => this.sinon.spy(this, level)); } + /** + * Reset spies on all log levels. + */ _reset() { - StubLogger._levels.forEach((level) => this[level].resetHistory()); // eslint-disable-line security/detect-object-injection + this.constructor._levels.forEach((level) => this[level].resetHistory()); // eslint-disable-line security/detect-object-injection } }