123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- /*
- * console-test.js: Tests for instances of the Console transport
- *
- * (C) 2010 Charlie Robbins
- * MIT LICENSE
- *
- */
- var path = require('path'),
- vows = require('vows'),
- assert = require('assert'),
- winston = require('../../lib/winston'),
- helpers = require('../helpers'),
- stdMocks = require('std-mocks');
- var npmTransport = new (winston.transports.Console)(),
- syslogTransport = new (winston.transports.Console)({ levels: winston.config.syslog.levels }),
- alignTransport = new (winston.transports.Console)({ showLevel: true, align: true }),
- defaultTransport = new (winston.transports.Console)(),
- rawTransport = new (winston.transports.Console)({ level: 'verbose', raw: true }),
- debugStdoutTransport = new (winston.transports.Console)({ debugStdout: true }),
- stderrLevelsTransport = new (winston.transports.Console)({ stderrLevels: ['info', 'warn'] }),
- customLevels = {
- alpha: 0,
- beta: 1,
- gamma: 2,
- delta: 3,
- epsilon: 4,
- },
- customLevelsAndStderrTransport = new (winston.transports.Console)({
- levels: customLevels,
- stderrLevels: ['delta', 'epsilon']
- }),
- noStderrTransport = new (winston.transports.Console)({ stderrLevels: [] });
- vows.describe('winston/transports/console').addBatch({
- "An instance of the Console Transport": {
- "with showLevel off": {
- topic : function() {
- npmTransport.showLevel = false;
- stdMocks.use();
- npmTransport.log('info', 'Le message', { meta: true }, this.callback);
- },
- "should not have level prepended": function () {
- stdMocks.restore();
- var output = stdMocks.flush(),
- line = output.stdout[0];
- assert.equal(line, 'Le message meta=true\n');
- }
- }
- }
- }).addBatch({
- "An instance of the Console Transport": {
- "with showLevel on": {
- topic : function() {
- npmTransport.showLevel = true;
- stdMocks.use();
- npmTransport.log('info', '');
- },
- "should have level prepended": function () {
- stdMocks.restore();
- var output = stdMocks.flush(),
- line = output.stdout[0];
- assert.equal(line, 'info: \n');
- }
- },
- }
- }).addBatch({
- "An instance of the Console Transport": {
- "with npm levels": {
- "should have the proper methods defined": function () {
- helpers.assertConsole(npmTransport);
- },
- "the log() method": helpers.testNpmLevels(npmTransport, "should respond with true", function (ign, err, logged) {
- assert.isNull(err);
- assert.isTrue(logged);
- })
- },
- "with syslog levels": {
- "should have the proper methods defined": function () {
- helpers.assertConsole(syslogTransport);
- },
- "the log() method": helpers.testSyslogLevels(syslogTransport, "should respond with true", function (ign, err, logged) {
- assert.isNull(err);
- assert.isTrue(logged);
- })
- },
- "with end-of-line": {
- topic : function() {
- npmTransport.eol = 'X';
- stdMocks.use();
- npmTransport.log('info', 'Le message', { meta: true }, this.callback);
- },
- "should have end-of-line character appended": function () {
- stdMocks.restore();
- var output = stdMocks.flush(),
- line = output.stdout[0];
- console.dir(line);
- assert.equal(line, 'info: Le message meta=trueX');
- }
- }
- }
- }).addBatch({
- "An instance of the Console Transport with the align option on": {
- topic : function() {
- stdMocks.use();
- alignTransport.log('info', '');
- },
- "should have logs aligned": function () {
- stdMocks.restore();
- var output = stdMocks.flush(),
- line = output.stdout[0];
- assert.equal(line, 'info\011: \n');
- }
- }
- }).addBatch({
- "with align off": {
- topic : function() {
- alignTransport.align = false;
- stdMocks.use();
- alignTransport.log('info', '');
- },
- "should not have logs aligned": function () {
- stdMocks.restore();
- var output = stdMocks.flush(),
- line = output.stdout[0];
- assert.equal(line, 'info: \n');
- }
- }
- }).addBatch({
- 'An instance of a raw Console transport': {
- 'logging to stdout': {
- topic: function () {
- stdMocks.use();
- rawTransport.log('verbose', 'hello there');
- }, 'should output json with message property': function () {
- stdMocks.restore();
- var output = stdMocks.flush();
- assert.ok(output.stdout[0].indexOf('"message":"hello there"') > -1);
- }
- }
- }
- }).addBatch({
- "An instance of the Console Transport with no options": {
- "should set stderrLevels to 'error' and 'debug' by default": helpers.assertStderrLevels(
- defaultTransport,
- ['error', 'debug']
- ),
- "should log only 'error' and 'debug' to stderr": helpers.testLoggingToStreams(
- winston.config.npm.levels, defaultTransport, ['debug', 'error'], stdMocks
- )
- }
- }).addBatch({
- "An instance of the Console Transport with debugStdout set": {
- "should throw an Error if stderrLevels is set": helpers.assertOptionsThrow(
- { debugStdout: true, stderrLevels: ['debug'] },
- "Error: Cannot set debugStdout and stderrLevels together"
- ),
- "should set stderrLevels to 'error' by default": helpers.assertStderrLevels(
- debugStdoutTransport,
- ['error']
- ),
- "should log only the 'error' level to stderr": helpers.testLoggingToStreams(
- winston.config.npm.levels, debugStdoutTransport, ['error'], stdMocks
- )
- }
- }).addBatch({
- "An instance of the Console Transport with stderrLevels set": {
- "should throw an Error if stderrLevels is set but not an Array": helpers.assertOptionsThrow(
- { debugStdout: false, stderrLevels: new String('Not an Array') },
- "Error: Cannot set stderrLevels to type other than Array"
- ),
- "should throw an Error if stderrLevels contains non-string elements": helpers.assertOptionsThrow(
- { debugStdout: false, stderrLevels: ["good", /^invalid$/, "valid"] },
- "Error: Cannot have non-string elements in stderrLevels Array"
- ),
- "should correctly set stderrLevels": helpers.assertStderrLevels(
- stderrLevelsTransport,
- ['info', 'warn']
- ),
- "should log only the levels in stderrLevels to stderr": helpers.testLoggingToStreams(
- winston.config.npm.levels, stderrLevelsTransport, ['info', 'warn'], stdMocks
- )
- }
- }).addBatch({
- "An instance of the Console Transport with stderrLevels set to an empty array": {
- "should log only to stdout, and not to stderr": helpers.testLoggingToStreams(
- winston.config.npm.levels, noStderrTransport, [], stdMocks
- )
- }
- }).addBatch({
- "An instance of the Console Transport with custom levels and stderrLevels set": {
- "should log only the levels in stderrLevels to stderr": helpers.testLoggingToStreams(
- customLevels, customLevelsAndStderrTransport, ['delta', 'epsilon'], stdMocks
- )
- }
- }).export(module);
|