Ответ 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');
});