Using Mocha to Test a Node.js Server
How do you write Mocha tests against a Node.js server and run the tests during development, presumably while your server is already running?
Solution: Leverage fork
to run the server code as a child process of the Mocha test. The following is a quick example of what this could look like.
The Server Code
Let's assume this code lives in your-project/server.js
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var http = require('http'); var util = require('util'); var port = process.env.PORT || 4824; http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(port, function () { util.log('Listening on port ' + port); if (process.send) { process.send('listening'); } }); |
Mocha Test Code
Let's assume this code lives in your-project/test/server.js
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | var assert = require("assert"); var request = require("request"); var fork = require("child_process").fork; describe('auther', function () { var child, port = 6666; before( function (done) { child = fork('auther.js', null, {env: {PORT: port}}); child.on('message', function (msg) { if (msg === 'listening') { done(); } }); }); after( function () { child.kill(); }); it('listens on the specified port', function (done) { request('http://127.0.0.1:' + port, function(err, resp, body) { assert(resp.statusCode === 200); done(); }); }); }); |