如何注入与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'); });