Acabo de terminar de arreglar varias advertencias en las pruebas de mi unidad/componente de mi aplicación Angular, que se ejecutan usando la ng test (con Karma/Jasmine).
Este proceso puede llevar bastante tiempo, ya que no siempre es obvio detectar qué caso(s) de prueba está(n) causando la(s) advertencia(s).
Entonces, ahora que no tengo más advertencias, me pregunto si hay una manera de hacer que la ng test falle automáticamente cada vez que hay advertencias.
Tal vez algo como esto en test.ts o en algún lugar donde se inicialicen las pruebas.
console.warn = (message) => throw new Error(message);No sé si recomendaría esto porque las advertencias son solo advertencias, pero los errores son errores y deben tratarse de inmediato. Dónde colocaría esto solo para las pruebas también puede ser complicado.
Defina un archivo adicional en la raíz de su espacio de trabajo, llamado karma.globals.js por ejemplo, que se ve así:
// add globals for karma test runs console.warn = (message) => { throw new Error(message); }; Ahora inclúyalo en su raíz karma.conf.js como:
const { join } = require('path'); module.exports = () => { return { // ... files: [ join(__dirname, 'karma.globals.js') ] // ... }; };Una solución simple y fácil es un bloque beforeAll en su archivo test.ts Reemplaza todos los métodos de la consola con una función de error.
De esa manera, las pruebas fallarán si llama a console.log y sabrá cuáles.
Si aún desea usar console.log dentro de una unidad que se está probando, puede espiarla. Pero eso también es malo debido al estado global compartido.
Aquí hay un ejemplo:
const errorFn = () => { throw new Error('No console logs!'); }; beforeAll(() => Object.keys(console).forEach((fn: string) => (console as any)[fn] = errorFn));