2016-07-13 15 views
6

Czy rejestrowanie Winstona może być selektywnie wyłączane podczas wykonywania testów jednostkowych modułu węzła?Wyłączyć rejestrowanie winston podczas uruchamiania testów jednostkowych?

Idealnie chciałbym mieć logowanie do celów informacyjnych i debugowania, gdy aplikacja jest uruchomiona, ale należy go wyłączyć, aby nie zaśmiecać wyników testu jednostki prezentacyjnej po uruchomieniu testów.

Moja wykorzystanie Winston wewnętrzny do mojego modułu, coś takiego:

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

Odpowiedz

5

Jeśli używasz żartem, można go wyłączyć tak:

  1. Set skonfigurować pliki biec przed rozpoczęciem testu. W package.json:

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

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

Dzięki za edit @Meyer, próbowałem użyć 4 spacji, ale nie jestem pewien, czy mój tekst nie został sformatowany jako kod –

+0

Czy wiesz, jak osiągnąć ten sam cel za pomocą [ava] (https://github.com/avajs/ava)? – aviggiano

4

Winston transporty mają właściwość silent które można ustawić, co jest prawdopodobnie trochę ładniejszy niż usunięcie całego transportu.

dodać nazwę transportów zrobić to trochę łatwiej tak:

var logger = new winston.Logger(); 

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

Następnie w teście lub set-up mogę selektywnie włączyć zalogowaniu się i wyłącza z:

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

Przepraszam, wiem, że to trochę stare pytanie.

To co robię jest nieco brzydkie, ale pozwala mi normalnie używać opcji Jest's --silent. Właśnie ustawiłem Winston's silent na process.argv.indexOf("--silent") >= 0. Na przykład:

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

'cichy: process.env.NODE_ENV === 'testing'' jest także opcją – Palisand

+0

Prawda. Ale nie można po prostu włączyć lub wyłączyć go za pomocą opcji '--silent' Jest, co było dla mnie dość denerwujące. –

+0

Ah, powinienem był powiedzieć, że będzie to opcja tylko wtedy, gdy ** zawsze ** chcesz uciszyć winstona podczas uruchamiania testów. – Palisand

Powiązane problemy