【问题标题】:how to inject mock testing hapi with Server.inject如何使用 Server.inject 注入模拟测试 hapi
【发布时间】:2014-10-08 06:09:50
【问题描述】:

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

使用Server.inject测试路由的问题是我不能mock数据库,因为我没有调用包含handler函数的文件,那么如何在handler中注入mock数据库呢?

【问题讨论】:

  • 您遇到的具体问题是什么? inject 应该可以工作。从编码的角度来看,inject 应该与实际请求相同。
  • 我想在测试端点时伪造数据库调用。
  • 你在这方面有什么收获吗?希望将 hapijs 用于 API,并希望模拟 db 调用以进行测试。
  • @Adamski 请参阅下面的my answer

标签: node.js node-mysql sequelize.js hapijs


【解决方案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');
});

【讨论】:

猜你喜欢
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2021-05-28
  • 1970-01-01
  • 2018-06-23
  • 2015-12-02
相关资源
最近更新 更多