Verwenden Sie jest.spyOn()
und spy.mockRestore()
.
const spy = jest.spyOn(console, 'warn').mockImplementation();
...
spy.mockRestore();
Die akzeptierte Antwort stellt das Original nicht wieder her console.warn()
und "gefährdet" die anderen Tests in derselben Datei (wenn console.warn()
sie in den anderen Tests oder im zu testenden Code verwendet wird).
Zu Ihrer Information: Wenn Sie console.warn = jest.fn()
eine Testdatei verwenden, hat dies keine Auswirkungen auf andere Testdateien (z. B. wird console.warn auf den ursprünglichen Wert in den anderen Testdateien zurückgesetzt).
Hinweis: Sie können spy.mockRestore()
inside afterEach()
/ aufrufen afterAll()
, um sicherzustellen, dass selbst wenn ein Test abstürzt, die anderen Tests aus derselben Datei nicht beeinträchtigt werden (z. B. wird sichergestellt, dass die Tests in derselben Datei vollständig isoliert sind).
Vollständiges Beispiel:
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([]);
Sie können nicht schreiben, console.warn = jest.fn().mockImplementation() [...] console.warn.mockRestore()
da das Original nicht wiederhergestellt wird console.warn()
.
/! \ Mit müssen mockImplementationOnce()
Sie noch anrufen 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([]);
Sie können auch schreiben:
const assert = console.assert;
console.assert = jest.fn();
...
console.assert = assert;