如何注入与Server.inject模拟testinghapi

我想用lab来testinghapi路由,我正在使用mysql数据库。

使用Server.inject来testing路由的问题是,我不能模拟数据库,因为我没有调用包含处理函数的文件,所以如何注入处理程序中的模拟数据库?

你应该可以使用像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被caching了。 所以,在你的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'); });