Bearbeiten: Dies ist das gleiche Problem wie hier beschrieben: https://github.com/facebook/jest/issues/2980. done()
wird wegen des Fehlers nicht aufgerufen, so dass die Zeitüberschreitung erreicht ist. Das ist ok. Aber was nicht in Ordnung ist, ist, dass Jasmin/Jest den aufgetretenen Fehler melden sollte.jest: Fehlermeldung verloren mit Promise
Hinweis: Beispiel-Quellcode kann here gefunden werden.
Betrachten Sie die folgende Funktion, die eine Promise
erzeugt, und ruft die done
Rückruf, wenn das Versprechen behoben:
// file: foo.js
function foo(done) {
const p = new Promise((resolve, reject) => {
setTimeout(() => {
//const xxx = 2;
resolve(xxx);
}, 100);
});
p.then(data => {
console.log(data);
done()
})
}
exports.foo = foo;
Es enthält einen Fehler: die xxx
Variable nicht definiert ist, so dass ein Fehler muss angehoben.
Wenn ich laufe Import diese Funktion und führen Sie es in einem Skript:
// file: index.js
const foo = require('./foo').foo;
foo(() => {});
und führen Sie das Skript mit node v8.6.0
:
node index.js
Ich erhalte den erwarteten Fehler (ReferenceError: xxx is not defined
):
/home/dfroger/repo/dfroger/issue/jest-promise-error/foo.js:5
resolve(xxx);
^
ReferenceError: xxx is not defined
at Timeout.setTimeout [as _onTimeout] (/home/dfroger/repo/dfroger/issue/jest-promise-error/foo.js:5:21)
at ontimeout (timers.js:469:11)
at tryOnTimeout (timers.js:304:5)
at Timer.listOnTimeout (timers.js:264:5)
Wenn ich jetzt einen Komponententest fürschreibe 10:
// file: foo.test.js
const foo = require('./foo').foo
describe('async',() => {
it('run foo', done => {
foo(done);
});
});
Und es mit jest v21.2.1
laufen:
./node_modules/.bin/jest
ich mehr und nicht die Fehlermeldung xxx being not defined
über erhalten:
async
✕ run foo (5004ms)
● async › run foo
Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
at node_modules/jest-jasmine2/build/queue_runner.js:64:21
at ontimeout (timers.js:469:11)
at tryOnTimeout (timers.js:304:5)
at Timer.listOnTimeout (timers.js:264:5)
Test Suites: 1 failed, 1 total
Tests: 1 failed, 1 total
Snapshots: 0 total
Time: 5.574s, estimated 6s
Ran all test suites.
Habe ich vermisse jest
verwendet? Ist es ein jest
Bug? Wie kann ich sicherstellen, dass jest
immer Fehlermeldungen korrekt melden?