2016-07-13 90 views
6

La registrazione di Winston può essere disattivata in modo selettivo durante l'esecuzione dei test di unità di un modulo nodo?Disabilitare la registrazione winston durante l'esecuzione dei test delle unità?

Idealmente, mi piacerebbe avere la registrazione per scopi informativi e di debug quando l'applicazione è in esecuzione, ma essere soppressa per non ingombrare i risultati del test dell'unità di presentazione quando eseguo i miei test.

Il mio uso di Winston è interno al mio modulo, qualcosa di simile a questo:

// MyModule.js 
var logger = require('winston'); 
module.exports = function() { 
    // does some stuff 
    // and logs some stuff like so: 
    logger.log('an informational message'); 
} 

// MyModuleTest.js 
describe('MyModule', fucntion() { 
    it('should do some stuff', function() { 
    var myModuleUnderTest = require('MyModule'); 
    // some tests 
    } 
} 
+1

http://stackoverflow.com/questions/22709882/how-to-suppress-application-logging-messages-from-a-node-js-application-when-run –

risposta

5

Se si utilizza Jest, è possibile disattivare in questo modo:

  1. Set istituito file essere eseguito prima che jest esegua il test. In package.json:

    { 
        "jest": { 
         "setupFiles": ["<rootDir>/jest-set-up/index.js"] 
        } 
    } 
    
  2. In jest-set-up/index.js:

    import winston from 'winston' 
    winston.remove(winston.transports.Console) 
    
+0

grazie per il modifica @Meyer, ho provato a utilizzare 4 spazi ma non sono sicuro che il mio testo non sia stato formattato come codice –

+0

Sai come raggiungere lo stesso obiettivo con [ava] (https://github.com/avajs/ava)? – aviggiano

4

Winston trasporta ha una proprietà silent che è possibile impostare, che è probabilmente un po 'più bello di rimuovere l'intero trasporto.

aggiungo un nome ai trasporti per fare è un po 'più facile in questo modo:

var logger = new winston.Logger(); 

logger.add(winston.transports.Console, { 
    name: 'console.info', 
    colorize: true, 
    showLevel: true, 
    formatter: consoleFormatter, 
}) 

Poi nel test o set-up che può selettivamente girare la registrazione e si spegne con:

logger.transports['console.info'].silent = true // turns off 
logger.transports['console.info'].silent = false // logging back on 
2

Scusa, so che questa è una domanda un po 'vecchia.

Quello che faccio è un po 'brutto, ma mi consente di continuare a utilizzare normalmente l'opzione --silent di Jest. Ho appena impostato Winston silent su process.argv.indexOf("--silent") >= 0. Per esempio:

const logger = new winston.Logger({ 
    …, 
    transports: [ 
    new winston.transports.Console({ 
     …, 
     silent: process.argv.indexOf("--silent") >= 0, 
    }), 
    ], 
}); 
+0

'silent: process.env.NODE_ENV === 'testing'' è anche un'opzione – Palisand

+0

True. Ma non puoi abilitarlo o disabilitarlo direttamente usando l'opzione '--silent' di Jest, cosa che mi è sembrata piuttosto fastidiosa. –

+0

Ah, avrei dovuto dire che sarebbe stata un'opzione solo se tu ** hai sempre ** voluto silenziare Winston durante l'esecuzione dei test. – Palisand