D'après ce que j'ai compris, le cadre de test mocha lève cette erreur si une erreur survient dans la méthode before
:
> $(npm bin)/mocha test/*.js
1) "before all" hook
J'ai essayé beaucoup de choses différentes pour essayer d'attraper cette erreur, mais rien ne semble fonctionner:
before(function(done) {
server = require('../app')
try {
server.listen(process.env.PORT)
done()
// server.initialize()
// .then(() => {
// console.info('listening on', process.env.PORT)
// server.listen(process.env.PORT, done)
// })
// .catch(err => {
// console.log(err)
// done(err)
// })
} catch (err) {
console.log('outer error', err)
done(err)
}
})
A partir du code commenté, vous pouvez voir que le serveur a une opération asynchrone à terminer avant que le serveur ne commence réellement à écouter. La seule chose qui semble fonctionner est d'initialiser le serveur en dehors du bloc before
et d'appeler immédiatement done()
dans la fonction before
ou de passer une fonction qui ne prend pas de paramètre. Cependant, le problème persiste car le serveur n’est pas initialisé avant le début du test.
Ce code fonctionne terriblement lorsque je me connecte à un débogueur, je ne peux même pas inspecter pour voir ce qui ne va pas.
Alors que je postais cette question, je suis tombé sur ce bogue , ce qui m’a amené à découvrir que je devais faire appel à this.enableTimeouts(false)
au début de la fonction before
, comme ceci:
let server
before(function(done) {
this.enableTimeouts(false) <----
server = require('../app')
server.initialize()
.then(() => {
console.info('listening on', process.env.PORT)
server.listen(process.env.PORT, done)
})
.catch(err => {
console.log(err)
done(err)
})
})
Espérons que cela aide quelqu'un d'autre pendant quelques heures de débogage.
Cela fait un petit moment que cela n’a pas été demandé, mais pour les futurs lecteurs, nous allons:
Vous pouvez exécuter votre test avec la commande mocha test/*.js --timeout 5000
. C'est tout.
Mais si vous exécutez votre test avec la commande npm test
, éditez simplement votre fichier package.json
Comme ceci:
"scripts": {
"start": "nodemon ./bin/www",
"test": "mocha --exit --recursive --timeout 5000" // add this line
}