From what I understand, the mocha test framework will throw this error if some error occurs in the before
method:
> $(npm bin)/mocha test/*.js
1) "before all" hook
I've tried many different things to try and catch this error, but nothing seems to be working:
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)
}
})
From the commented out code, you can see that the server has an asynchronous operation I need to complete before the server actually starts listening. The only thing that seems to be working is to initialize the server outside of the before
block and either call done()
immediately in the before
function, or pass a function that doesn't take a parameter. However this is still a problem since the server isn't initialized by the time the test starts.
Maddeningly, this code works when I connect to a debugger, so I can't even inspect to see what's wrong.
As I was posting this question, I stumbled on this bug which led me to the discovery that I need to make a call to this.enableTimeouts(false)
in the beginning of the before
function, like so:
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)
})
})
Hopefully this helps someone else a few hours of debugging.
It has been a little time since it was asked but for the future readers here we go:
You can run your test with mocha test/*.js --timeout 5000
command. That's it.
But if you run your test with npm test
command, just edit your package.json
file
like that:
"scripts": {
"start": "nodemon ./bin/www",
"test": "mocha --exit --recursive --timeout 5000" // add this line
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With