X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fstub-logger.js;h=c7ba5833091a65e2cf8c7d1840072ce956b6a18c;hb=HEAD;hp=6df2b94f97e4d932f53d9afca1f300d4b6acc0be;hpb=f4818ada492c17c8941616e935579ed7555ec636;p=squeep-test-helper diff --git a/lib/stub-logger.js b/lib/stub-logger.js index 6df2b94..aa053a9 100644 --- a/lib/stub-logger.js +++ b/lib/stub-logger.js @@ -1,33 +1,51 @@ 'use strict'; -const sinon = require('sinon'); // eslint-disable-line node/no-unpublished-require - -const nop = () => { /* */ }; +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 - }); + 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() { - Object.keys(StubLogger._nullLogger).forEach((level) => sinon.spy(this, level)); + this.constructor._levels.forEach((level) => this[level].resetHistory()); // eslint-disable-line security/detect-object-injection } }