As far as testing goes I couldn't find much material on how to go about and test my API with, say something like Mocha. I suppose I could've just browsed the hapi source code and see how it was tested internally, but what I ended up doing (after some googling) was that I'd actually start the hapi server before each test case and then stop it after each test. In the tests I used mikeal's request library to query the API. This worked but it felt a bit awkward compared to, for example, what Django provides.
Luckily, I ran into Eran's great talk about hapi where he briefly mentions the server.inject() method. I remember seeing that method before but didn't really understand what it would be good for. But actually with that method you can easily build your API tests. So, I created a generic function for querying my API:
/**
 * @param {hapi.Server} server - hapi server instance
 * @param {object} requestobj - options for making the request
 */
exports.request = function (server, requestobj, callback)
    server.inject(requestobj, function (res)
        if (res.payload)
            res.body = JSON.parse(res.payload);
        }
        callback(res);
    });
In the tests I would do something like this (note that the following test uses Mocha but any test framework should do just fine):
    beforeEach(function (done) {
        var api = require('../api/api.js');
        this.server = api.createServer();
        done();
    });
    it('should GET all players', function (done) {
        var request = { url: '/player/', method: 'GET' };
        test.request(this.server, request, function (res) {
            res.statusCode.should.be.equal(200);
            res.body.length.should.be.equal(6);
            done();
        });
    });
And that was it. No more starting and stopping the server all the time.
 
