Ich versuche, console.warn / error zu verspotten, aber ich kann nicht. Ich benutze eine Drittanbieter-Bibliothek, die console.warn darin aufruft. Ich muss testen, ob es heißt oder nicht. In meinem Testfall habe ich versucht, console.warn zu stubben, aber es hat nicht geholfen. Danach habe ich versucht, die Konsole manuell zu verspotten, es hat auch nicht geklappt.
console.warn = jest.fn();
testSchema('/app/components/Users/UserItem/UserItemContainer.js');
expect(console.warn).toBeCalled();
hat nicht funktioniert
console.warn = jest.fn();
testSchema('/app/components/Users/UserItem/UserItemContainer.js');
console.warn('error');
expect(console.warn).toBeCalled();
funktionierte. Aber ich sehe immer noch console.warn node_modules/babel-relay-plugin/lib/getBabelRelayPlugin.js:138
im Terminal. Kann mir jemand helfen?
javascript
unit-testing
tdd
jestjs
Errorpro
quelle
quelle
global.console = {...}
wird den Fehler unterdrücken , während diesjest.spyOn(...)
nicht der Fall ist. Sie entscheiden, ob Fehler in Ihren Tests unterdrückt werden sollen oder nicht.jest.spyOn(...)
weil es einfacher zu bereinigen ist und ich TypeScript verwende, aber auch Fehler in der Ausgabe unterdrücken wollte, wie @ a11smiles erwähnt. Also habe ich verwendet,jest.spyOn(global.console, "warn").mockImplementation(() => {})
was verhindert, dass der Spion zum zugrunde liegendenconsole.warn
Verwenden Sie
jest.spyOn()
undspy.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 (wennconsole.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()
insideafterEach()
/ aufrufenafterAll()
, 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'); // Won't be displayed (mocked) console.warn('message2'); // Won't be displayed (mocked) expect(console.warn).toHaveBeenCalledTimes(2); expect(spy).toHaveBeenCalledTimes(2); // Another syntax expect(console.warn).toHaveBeenLastCalledWith('message2'); expect(spy).toHaveBeenLastCalledWith('message2'); // Another syntax expect(spy.mock.calls).toEqual([['message1'], ['message2']]); expect(console.warn.mock.calls).toEqual([['message1'], ['message2']]); spy.mockRestore(); // IMPORTANT //console.warn.mockRestore(); // Another syntax console.warn('message3'); // Will be displayed (not mocked anymore) expect(spy).toHaveBeenCalledTimes(0); // Not counting anymore expect(spy.mock.calls).toEqual([]); //expect(console.warn.mock.calls).toEqual([]); // Crash
Sie können nicht schreiben,
console.warn = jest.fn().mockImplementation() [...] console.warn.mockRestore()
da das Original nicht wiederhergestellt wirdconsole.warn()
./! \ Mit müssen
mockImplementationOnce()
Sie noch anrufenspy.mockRestore()
:// /!\ const spy = jest.spyOn(console, 'warn').mockImplementationOnce(() => {}); console.warn('message1'); // Won't be displayed (mocked) expect(console.warn).toHaveBeenCalledTimes(1); expect(spy).toHaveBeenCalledTimes(1); // Another syntax expect(console.warn).toHaveBeenLastCalledWith('message1'); expect(spy).toHaveBeenLastCalledWith('message1'); // Another syntax expect(spy.mock.calls).toEqual([['message1']]); expect(console.warn.mock.calls).toEqual([['message1']]); console.warn('message2'); // Will be displayed (not mocked anymore) // /!\ expect(console.warn).toHaveBeenCalledTimes(2); // BAD => still counting expect(spy.mock.calls).toEqual([['message1'], ['message2']]); expect(console.warn.mock.calls).toEqual([['message1'], ['message2']]); spy.mockRestore(); // IMPORTANT //console.warn.mockRestore(); // Another syntax console.warn('message3'); // Will be displayed (not mocked anymore) expect(spy).toHaveBeenCalledTimes(0); // Not counting anymore expect(spy.mock.calls).toEqual([]); //expect(console.warn.mock.calls).toEqual([]); // Crash
Sie können auch schreiben:
const assert = console.assert; console.assert = jest.fn(); ... console.assert = assert;
quelle