2016-07-13 3 views
6

Можно ли выборочно отключить ведение журнала Winston при выполнении модульных тестов узла-модуля?Отключить ведение журнала Winston при выполнении модульных тестов?

В идеале, я хотел бы иметь журнал для информационных и отладочных целей, когда приложение работает, но должно быть подавлено, чтобы не загромождать результаты теста единицы измерения при выполнении моих тестов.

Мое использование Winston является внутренним для моего модуля, что-то вроде этого:

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

ответ

5

Если вы используете шутя, вы можете отключить его следующим образом:

  1. Установить настройки файлов выполняться до начала теста. В package.json:

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

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

благодарит за edit @Meyer, я пытался использовать 4 пробела, но не уверен, что мой текст не был отформатирован как код –

+0

Знаете ли вы, как достичь той же цели с помощью [ava] (https://github.com/avajs/ava)? – aviggiano

4

Winston транспортирует имеют silent свойство, которое вы можете установить, что, вероятно, немного лучше, чем удаление весь транспорт.

добавить имя транспортов, чтобы сделать немного легче, как это:

var logger = new winston.Logger(); 

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

Затем в тесте или настройки можно выборочно отключить запись в журнал и выключаться:

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

Извините, я знаю, что это старый вопрос.

Что я делаю, это немного уродливо, но позволяет мне обычно использовать опцию Jest's --silent. Я просто установил silent Winston на process.argv.indexOf("--silent") >= 0. Например:

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

'silent: process.env.NODE_ENV === 'testing' 'также является опцией – Palisand

+0

True. Но тогда вы не можете просто включить его или отключить, используя опцию Jss -silent', которая мне показалась довольно раздражающей. –

+0

Ах, я должен был сказать, что это будет вариант, только если вы ** всегда ** хотите заставить замолчать winston при запуске тестов. – Palisand

Смежные вопросы