node.js - tutorial - node js visual studio 2017
¿Cómo suprimir los mensajes de registro de aplicaciones de una aplicación node.js cuando se ejecutan pruebas unitarias? (2)
Mientras pruebo la unidad de mi aplicación node.js (que básicamente es un backend REST) usando mocha y supertest, solo necesito el mensaje de prueba específica en la pantalla, pero el stdout también está lleno de mensajes de registro de la aplicación.
Comienzo la prueba unitaria con:
mocha -R spec .
... y obtener esta salida (esto es lo que no debería ser):
[App] Listening on port 3000 ...
[App] Starting app, hooray!
Project API
GET /projects
[App] entering "projects" module ...
√ should return an array of projects (317ms)
Marqué el mensaje de registro de la aplicación con [Aplicación]. Lo que realmente quiero sería esta salida de la prueba de la unidad:
Project API
GET /projects
√ should return an array of projects (317ms)
¿Cómo puedo suprimir la salida de console.log / warn / error de la aplicación intercalada con la salida del reportero de Mocha?
SOLUCIÓN:
Siguiendo el enfoque de Dankohn, terminé así, lo que resuelve mi problema (usando Winston para el registro):
(en el archivo de servidor "principal" del nodo, server.js :)
if (process.env.NODE_ENV !== ''test'') {
logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)(),
new (winston.transports.File)({ filename: ''foo.log'' })
]
});
} else {
// while testing, log only to file, leaving stdout free for unit test status messages
logger = new (winston.Logger)({
transports: [
new (winston.transports.File)({ filename: ''foo.log'' })
]
});
}
... y para establecer la variable env, cada archivo de prueba de unidad comienza con:
process.env.NODE_ENV = ''test'';
En tu app.js:
if (process.env.NODE_ENV !== ''test'') {
app.use(express.logger());
}
En la parte superior de cada uno de tus archivos de mocha:
process.env.NODE_ENV = ''test'';
Actualizar:
Usamos esta función en nuestro código de importación:
function logExceptOnTest(string) {
if (process.env.NODE_ENV !== ''test'') {
console.log(string);
}
}
Luego, reemplace todo su console.log(''it worked'')
con logExceptOnTest(''it worked'')
. El truco básico es usar variables de entorno como indicador global en cuanto al nivel de registro que desea.
Ya respondí pero pensé que agregaría que puedes hacer esto con winston.add ()
var logger = new (winston.Logger)({
transports: [
new (winston.transports.File)({filename: ''node.log''})
]
});
if (process.env.NODE_ENV === ''test'') {
logger.add(winston.transports.Console, {prettyPrint: true});
}