Jest: Permitir que console.error/warn/log se sobrescriba en las pruebas

Creado en 31 mar. 2017  ·  3Comentarios  ·  Fuente: facebook/jest


¿Desea solicitar una característica o informar un error ?
rasgo

¿Cuál es el comportamiento actual?
Debido a BufferedConsole , es imposible sobrescribir console.error , console.log , console.warn y console.info .

Caso de uso: Nos gustaría poder tener console.error y console.warn que arrojan errores y fallan en las pruebas.

Si el comportamiento actual es un error, proporcione los pasos para reproducir y una demostración de repl.it a través de https://repl.it/languages/jest o un repositorio mínimo en GitHub que podemos yarn install y yarn test .

¿Cuál es el comportamiento esperado?
Espero que si agrego console.error = (message) => { throw new Error(message); }; (globalmente, en una prueba, o en setupFiles/setupFramework), cada vez que se llame a console.error en una prueba, arrojará un error y fallará una prueba.

En realidad, no pasa nada.

Proporcione su configuración exacta de Jest y mencione su Jest, nodo, versión de yarn/npm y sistema operativo.

N / A

Comentario más útil

Use la función de burla jest.fn() :

console.warn = jest.fn(warn => {
  throw new Error(warn);
});

Todos 3 comentarios

Use la función de burla jest.fn() :

console.warn = jest.fn(warn => {
  throw new Error(warn);
});

@thymikee Esto tampoco funciona como se esperaba, usando un archivo de configuración global:

en "setupTestFrameworkScriptFile": "<rootDir>/tools/jest/setup-framework.js"

beforeEach(() => {
  console.error = jest.fn((error) => {
    throw new Error(error);
  });
});

En prueba:

const somePromiseThatLogsConsoleError = () => {
  return new Promise((resolve, reject) => {
    console.error('foobar');
    resolve();
  });
});

it('test that has console.error', () => {
  return somePromiseThatLogsConsoleError().then(() => {
    expect(false).toBeTrue();
  });
});

Simplemente probé y funcionó:

// test file
test('lol', () => {
  return new Promise((resolve) => {
    console.log('lol');
    resolve();
  });
});
// setup file
global.console.log = () => {
  throw new Error('hey!');
};

resultado:

 __tests__/test-test.js
  ✕ lol (3ms)

  ● lol

    hey!

      at CustomConsole.Object.<anonymous>.global.console.log (setup.js:2:9)
      at resolve (__tests__/test-test.js:3:13)
      at Object.<anonymous>.test (__tests__/test-test.js:2:10)
      at process._tickCallback (internal/process/next_tick.js:109:7)

Test Summary
 › Ran all tests.
 › 1 test failed, 0 tests passed (1 total in 1 test suite, run time 0.661s)
¿Fue útil esta página
0 / 5 - 0 calificaciones