Möchten Sie eine Funktion anfordern oder einen Fehler melden?
Merkmal
Wie ist das aktuelle Verhalten?
Aufgrund von BufferedConsole
ist es unmöglich, console.error
, console.log
, console.warn
und console.info
zu überschreiben.
Anwendungsfall: Wir möchten, dass console.error
und console.warn
Fehler auslösen und Tests nicht bestehen.
Wenn das aktuelle Verhalten ein Fehler ist, stellen Sie bitte die zu reproduzierenden Schritte und entweder eine repl.it-Demo über https://repl.it/languages/jest oder ein minimales Repository auf GitHub bereit, das wir yarn install
und yarn test
.
Was ist das erwartete Verhalten?
Ich erwarte, dass, wenn ich console.error = (message) => { throw new Error(message); };
(global, in einem Test oder in setupFiles/setupFramework) hinzufüge, dass jedes Mal, wenn console.error
in einem Test aufgerufen wird, ein Fehler ausgegeben wird und ein Test fehlschlägt.
In Wirklichkeit passiert nichts.
Bitte geben Sie Ihre genaue Jest-Konfiguration an und erwähnen Sie Ihre Jest-, Node-, Garn-/npm-Version und Ihr Betriebssystem.
N / A
Spottfunktion verwenden jest.fn()
:
console.warn = jest.fn(warn => {
throw new Error(warn);
});
@thymikee Dies funktioniert auch nicht wie erwartet, wenn eine globale Setup-Datei verwendet wird:
in "setupTestFrameworkScriptFile": "<rootDir>/tools/jest/setup-framework.js"
beforeEach(() => {
console.error = jest.fn((error) => {
throw new Error(error);
});
});
Im Test:
const somePromiseThatLogsConsoleError = () => {
return new Promise((resolve, reject) => {
console.error('foobar');
resolve();
});
});
it('test that has console.error', () => {
return somePromiseThatLogsConsoleError().then(() => {
expect(false).toBeTrue();
});
});
Ich habe es gerade ausprobiert und es hat funktioniert:
// test file
test('lol', () => {
return new Promise((resolve) => {
console.log('lol');
resolve();
});
});
// setup file
global.console.log = () => {
throw new Error('hey!');
};
Ergebnis:
__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)
Hilfreichster Kommentar
Spottfunktion verwenden
jest.fn()
: