Как вводить ложное тестирование hapi с помощью Server.inject

Я хочу проверить маршруты hapi с помощью лаборатории, я использую базу данных mysql.

Проблема с использованием Server.inject для проверки маршрута заключается в том, что я не могу издеваться над базой данных, потому что я не вызываю файл, содержащий функцию обработчика, поэтому как я могу добавить базу данных mock в обработчик?

Ответ 1

Вы можете использовать что-то вроде sinon, чтобы издеваться над чем-либо, что вы require. Например, скажем, у вас есть dbHandler.js где-то:

var db = require('db');

module.exports.handleOne = function(request, reply) {
    reply(db.findOne());
}

И затем в вашем server.js:

var Hapi = require('hapi'),
    dbHandler = require('dbHandler')

var server = new Hapi.Server(); server.connection({ port: 3000 });

server.route({
    method: 'GET',
    path: '/',
    handler: dbHandler.handleOne
});

Вы все еще можете высмеивать этот вызов, потому что все вызовы require кэшируются. Итак, в вашем test.js:

var sinon = require('sinon'),
    server = require('server'),
    db = require('db');

sinon.stub(db, 'findOne').returns({ one: 'fakeOne' });
// now the real findOne won't be called until you call db.findOne.restore()
server.inject({ url: '/' }, function (res) {
    expect(res.one).to.equal('fakeOne');
});