2016-07-13 19 views
6

Kann die Winston-Protokollierung bei der Ausführung von Komponententests eines Knotenmoduls selektiv deaktiviert werden?Winston-Protokollierung beim Ausführen von Komponententests deaktivieren?

Idealerweise hätte ich gerne eine Protokollierung für Informations- und Debugging-Zwecke, wenn die Anwendung läuft, aber unterdrückt, um die Testergebnisse der Präsentationseinheit nicht zu überladen, wenn ich meine Tests durchführe.

Meine Verwendung von winston meinem Modul intern ist, so etwas wie dieses:

// 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 –

Antwort

5

Wenn Sie Jest verwenden, können Sie es wie so deaktivieren:

  1. Set einrichten Dateien vor dem Test ausgeführt werden. 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

Dank für die edit @Meyer, ich habe versucht, 4 Leerzeichen zu verwenden, aber nicht sicher, dass mein Text nicht als Code formatiert wurde –

+0

Wissen Sie, wie Sie mit [ava] (https://github.com/avajs/ava) das gleiche Ziel erreichen? – aviggiano

4

transportiert Winston eine silent Eigenschaft haben, die Sie festlegen können, was wahrscheinlich ein wenig schöner ist als der gesamte Transport entfernen.

füge ich einen Namen zu den Transporten ein wenig einfacher, so zu machen ist:

var logger = new winston.Logger(); 

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

dann im Test oder Set-up kann ich selektiv die Protokollierung ein- und ausschalten mit:

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

Sorry, ich weiß, das ist ein bisschen eine alte Frage.

Was ich mache ist ein bisschen hässlich, aber erlaubt mir, Jests --silent Option normal zu verwenden. Ich habe Winstons silent auf process.argv.indexOf("--silent") >= 0 gesetzt. Zum Beispiel:

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

'silent: process.env.NODE_ENV === 'testing'' ist auch eine Option – Palisand

+0

True. Aber dann kannst du es nicht einfach aktivieren oder deaktivieren, indem du Jests '--silent'-Option direkt verwendest, was ich ziemlich nervig fand. –

+0

Ah, ich hätte sagen sollen, es wäre nur eine Option, wenn Sie Winston bei Tests immer zum schweigen bringen wollen. – Palisand