Ich verwende mocha
, um eine Reihe von Integrationstests gegen einen externen Webservice durchzuführen. Ich verwende superagent-promise
für die Anfrage/Antwort-Behandlung, und ich verwende expect
als meine Assertion-Bibliothek.Mocha Tests mit Superagenten + verspricht Timeout anstatt mit 'expect' zu scheitern
Für einige dieser Tests muss ich eine große Anzahl von Anfragen zusammenketten, also waren die Versprechen sehr hilfreich. Allerdings merke ich, dass meine Tests jetzt mit einem Timeout (und keine Fehlermeldung) statt mit der Fehlermeldung selbst fehlschlagen. Als ein einfaches Beispiel:
it('[MESSAGES-1] cannot be posted without an auth token', function(done) {
agent.post(config.webRoot + '/rooms/ABC/messages').send({
content: 'This is a test!'
}).end().then(function(res) {
// Not expected
}, function(err) {
expect(err.status).toBe(401)
done()
})
})
funktioniert wie erwartet und übergibt:
Messages
✓ [MESSAGES-1] cannot be posted without an auth token
jedoch, wenn ich meine Behauptung ändern einen anderen Statuscode zu erwarten:
expect(err.status).toBe(200) // This should fail
Dann wird der Test scheitert mit einer Zeitüberschreitung!
1) Messages [MESSAGES-1] cannot be posted without an auth token:
Error: timeout of 1000ms exceeded. Ensure the done() callback is being called in this test.
Ist dies ein häufiges Problem? Gibt es einen Workaround oder Tweak, den ich machen kann? Ich möchte nicht die Fähigkeit verlieren, Versprechungen zu verwenden.
Das war es! Ich bin neu in Versprechungen in JavaScript - ich war mir der 'catch()' nicht bewusst, aber das funktioniert perfekt. –