Utilice jest.spyOn()
y spy.mockRestore()
.
const spy = jest.spyOn(console, 'warn').mockImplementation();
...
spy.mockRestore();
La respuesta aceptada no restaura el original console.warn()
y "comprometerá" las otras pruebas dentro del mismo archivo (si console.warn()
se usa dentro de las otras pruebas o el código que se está probando).
Para su información, si lo usa console.warn = jest.fn()
en un archivo de prueba, no afectará a otros archivos de prueba (por ejemplo, console.warn volverá a su valor original en los otros archivos de prueba).
Consejo: puede llamar al spy.mockRestore()
interior afterEach()
/ afterAll()
para asegurarse de que incluso si una prueba falla, no comprometerá las otras pruebas del mismo archivo (por ejemplo, garantiza que las pruebas dentro del mismo archivo estén completamente aisladas).
Ejemplo completo:
const spy = jest.spyOn(console, 'warn').mockImplementation();
console.warn('message1');
console.warn('message2');
expect(console.warn).toHaveBeenCalledTimes(2);
expect(spy).toHaveBeenCalledTimes(2);
expect(console.warn).toHaveBeenLastCalledWith('message2');
expect(spy).toHaveBeenLastCalledWith('message2');
expect(spy.mock.calls).toEqual([['message1'], ['message2']]);
expect(console.warn.mock.calls).toEqual([['message1'], ['message2']]);
spy.mockRestore();
console.warn('message3');
expect(spy).toHaveBeenCalledTimes(0);
expect(spy.mock.calls).toEqual([]);
No puedes escribir
console.warn = jest.fn().mockImplementation();
...
console.warn.mockRestore();
porque no restaurará el original console.warn()
.
/! \ mockImplementationOnce()
Aún necesitará llamar a spy.mockRestore()
:
const spy = jest.spyOn(console, 'warn').mockImplementationOnce(() => {});
console.warn('message1');
expect(console.warn).toHaveBeenCalledTimes(1);
expect(spy).toHaveBeenCalledTimes(1);
expect(console.warn).toHaveBeenLastCalledWith('message1');
expect(spy).toHaveBeenLastCalledWith('message1');
expect(spy.mock.calls).toEqual([['message1']]);
expect(console.warn.mock.calls).toEqual([['message1']]);
console.warn('message2');
expect(console.warn).toHaveBeenCalledTimes(2);
expect(spy.mock.calls).toEqual([['message1'], ['message2']]);
expect(console.warn.mock.calls).toEqual([['message1'], ['message2']]);
spy.mockRestore();
console.warn('message3');
expect(spy).toHaveBeenCalledTimes(0);
expect(spy.mock.calls).toEqual([]);
También puedes escribir:
const assert = console.assert;
console.assert = jest.fn();
...
console.assert = assert;