UNPKG

@ladjs/logger

Version:
118 lines (101 loc) 3.97 kB
const { format } = require('util'); const test = require('ava'); const Logger = require('../'); const { beforeEach, afterEach } = require('./helpers'); test.beforeEach(beforeEach); test.afterEach.always(afterEach); test('returns itself', t => { t.true(t.context.logger instanceof Logger); }); test('sets a config object', t => { t.true(t.context.logger instanceof Logger); }); test(`returns array of levels`, t => { t.deepEqual(Logger.levels, ['debug', 'info', 'warning', 'error', 'fatal']); }); Logger.levels.forEach(level => { test(`level ${level} works`, t => { const message = `test ${level} message`; t.context.logger[level](message); if (level === 'debug') t.true(t.context.stderr.calledWithMatch(message)); else t.true(t.context.spy.calledWithMatch(message)); }); }); Logger.levels.forEach(level => { test(`level ${level} works with meta`, t => { const message = `${level} works with meta`; t.context.logger[level](message, { user: { username: 'test' } }); if (level === 'debug') { t.true(t.context.stderr.calledWithMatch(message)); } else { t.true(t.context.spy.calledWithMatch(message)); t.true(t.context.spy.calledWith({ user: { username: 'test' } })); } }); }); Logger.levels.forEach(level => { test(`level ${level} works with Error as first argument`, t => { const logger = new Logger({ showStack: true, processName: 'ava-tests' }); const err = new Error(`test ${level} error`); logger[level](err); // TODO: t.true(t.context.spy.calledWith(err.stack)); if (level === 'debug') t.true(t.context.stderr.calledWithMatch(err.message)); else t.true(t.context.spy.calledWithMatch(err.message)); }); }); Logger.levels.forEach(level => { test(`level ${level} allows four or more args`, t => { const args = ['arg1', 'arg2', 'arg3', 'arg4', 'arg5']; t.context.logger[level](...args); const message = format(...args); if (level === 'debug') t.true(t.context.stderr.calledWithMatch(message)); else t.true(t.context.spy.calledWithMatch(message)); }); }); Logger.levels.forEach(level => { test(`level ${level} allows message using placeholder token`, t => { const args = ['arg1 %s hello world', 'arg2']; t.context.logger[level](...args); const message = format(...args); if (level === 'debug') t.true(t.context.stderr.calledWithMatch(message)); else t.true(t.context.spy.calledWithMatch(message)); }); }); Logger.levels.forEach(level => { test(`level ${level} converts a meta Array to String`, t => { const args = ['hello', [1, 2, 3]]; t.context.logger[level](...args); const message = format(...args); if (level === 'debug') t.true(t.context.stderr.calledWithMatch(message)); else t.true(t.context.spy.calledWithMatch(message)); }); }); Logger.levels.forEach(level => { test(`level ${level} converts message to String if not one`, t => { t.context.logger[level](false); if (level === 'debug') t.true(t.context.stderr.calledWithMatch('false')); else t.true(t.context.spy.calledWithMatch('false')); }); }); test('log can be used like console.log(message)', t => { t.context.logger.log('hello world'); t.true(t.context.spy.calledWithMatch('hello world')); }); test('log can be used like console.log(message, meta)', t => { const message = 'hello world'; t.context.logger.log(message, { user: { username: 'test' } }); t.true(t.context.spy.calledWithMatch(message)); t.true(t.context.spy.calledWith({ user: { username: 'test' } })); }); test('log can be used with util.format', t => { const args = ['arg1', 'arg2', 'arg3', 'arg4', 'arg5']; t.context.logger.log(...args); t.true(t.context.spy.calledWithMatch(format(...args))); }); test('log can be used with placeholder tokens', t => { const args = ['arg1 %s hello world', 'arg2']; const message = format(...args); t.context.logger.log(...args); t.true(t.context.spy.calledWithMatch(message)); });