Recently I had to setup an integration test environment for an express.js app written in coffeescript.
In this case I could naturally start the server manually on a custom port, and then run the integration tests, but I’m lazy 🙂 So I tried to load the server file in the specs to let them start it and stop it when they need it. Here’s the code.
But you cannot always start/stop the server this way. In my case this isn’t a good option due to an issue in socket.io that is preventing the server to be stopped gracefully after each spec. After the first spec, I have to find a way to kill it, before proceeding to the next spec.
I can use ChildProcess.spawn to spawn another instance, but how can I detect that the server has been correctly started?
Looking through the doc, I found ChildProcess.fork. It’s not the “classic fork” you learn studying C, but it’s a special case of spawn in which you have a builtin communication channel. This means I can execute any other node application and let the two applications talk to each other.