12

我想用实验室测试 hapi 路由,我使用的是 mysql 数据库。

使用 Server.inject 测试路由的问题是我无法模拟数据库,因为我没有调用包含处理程序函数的文件,那么如何在处理程序中注入模拟数据库?

4

1 回答 1

5

您应该可以使用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');
});
于 2015-03-02T22:35:41.273 回答