我想用实验室测试 hapi 路由,我使用的是 mysql 数据库。
使用 Server.inject 测试路由的问题是我无法模拟数据库,因为我没有调用包含处理程序函数的文件,那么如何在处理程序中注入模拟数据库?
我想用实验室测试 hapi 路由,我使用的是 mysql 数据库。
使用 Server.inject 测试路由的问题是我无法模拟数据库,因为我没有调用包含处理程序函数的文件,那么如何在处理程序中注入模拟数据库?
您应该可以使用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');
});