ich derzeit Mokka 2.5.3, 2.0.0 Supertest verwenden, Knex 0.11.10, restify 4.1.1 und 3.1.4 sqlite3.Warum Mocha Timeout bei Verwendung mit Restify und Knex?
Ich habe den folgenden sehr einfachen restify Server:
const restify = require('restify');
const knex = require('knex')({
client: 'sqlite3',
connection: {
'filename': 'test.db'
}
});
const app = restify.createServer();
app.get('/', (req, res, next) => {
knex.select().from('nonexistent_table')
.then((rows) => {
return res.json(rows);
})
.catch((err) => {
return res.send('error');
});
});
module.exports = app;
Der unten Test wird den Test verursacht bei 2000ms Timeout statt Fehlern:
const assert = require('assert');
const supertest = require('supertest');
const app = require('./app');
describe('GET /', function() {
it('should not timeout', function (done) {
supertest(app)
.get('/')
.end(function(err, res) {
assert(false);
done();
});
});
});
Wenn der Aufruf von Knex statt erfüllen Wenn der Test abgelehnt wird, schlägt der Test fehl und es tritt keine Zeitüberschreitung auf. Die Zeitüberschreitung tritt nur auf, wenn der Knex-Aufruf abgelehnt wird.
Hat jemand Gedanken auf, was könnte das Timeout statt eines richtigen Ausfall verursachen?
EDIT: ich dies so weit ausgetestet habe, wie ich konnte, und es scheint, das Timeout passiert, wenn Mokka einen Stacktrace zu erzeugen versucht.
Siehe meine Antwort [hier] (http://stackoverflow.com/a/39103469/893780): weil die Behauptung wirft einen Fehler, 'done' nie _and_ der Fehler genannt wird nie gefangen. – robertklep
@robertklep danke, aber ich bin mir nicht sicher, dass das die richtige Antwort aus zwei Gründen ist. Wenn knex aufgelöst wird, schlägt der Test normalerweise fehl. Da ich im Test gerade "Assert (False)" mache, sollte die Art des Fehlers nicht von der Antwort des Restify-Servers oder dem Ergebnis von Knex abhängen, aber irgendwie funktioniert es! Zweitens, wenn ich einen Mocha-Test schreibe, der keinen asynchronen HTTP-Aufruf ausführt und einfach einen Fehler ausgibt, wird der Test zu Recht fehlschlagen und kein Timeout, obwohl ich nie 'done()' aufrufen werde. Dies führt mich zu der Annahme, dass das Werfen von Fehlern/fehlgeschlagenen Behauptungen der normale Weg ist, dass Mocha-Tests fehlschlagen. – harrymonster