Как я могу заглушить хапи обработчик?

1

Я пытаюсь высмеять функцию из обработчика маршрута...

Вот мой маршрут:

server.route({
  method: 'GET',
  path: '/api/color/{format}',
  handler: this.pingLogic.getPing,
  config: {
    description: 'This is ping route',
    tags: ['api', 'v1', 'ping route'],
    validate: {
      params: pingValidator
    }
  }
})

Функция getPing выглядит так:

getPing(req: HapiRequest, reply: Hapi.ReplyNoContinue): any {
  req.seneca
    .act(
      {
        role: 'color',
        format: req.params.format,
        color: 'red'
      },
      (err: any, out: any): any => {
        return reply(err || out)
      }
    )
}

Вот мой тест:

L.test('returns the hello message as text.', (done) => {
  const ping = new PingLogic;
  sinon.stub(ping, 'getPing').returns({});
  server.inject('/api/color/hex', (response: any) => {
    expect(response.payload).to.equal({color: 'green'});
    done();
  });
});

Он не работает, он не распознает эту часть: sinon.stub(ping, 'getPing').returns({}); Кто-нибудь знает, как сделать эту работу?

Теги:
sinon
hapi.js
lab

1 ответ

0

Я просто решил эту же проблему, используя proxyquire через sinon.

const route = proxyquire('./route', {
  './pingLogic': {
    default: sinon.stub().callsArgWith(1, 'response'),
  },
}).default;

server.route(route);

server.inject({ request }) // Calls my stub

Другое решение может быть примерно таким:

В файле маршрута:

handler: (request, reply) => { this.pingLogic.getPing(request, reply); }

Затем вы можете заглушить pingLogic, как обычно.

Я думаю, это связано с тем, что hapi регистрирует реальный объект, когда он вам нужен, и заканчивая его, когда это слишком поздно. Если вы завернете его в функцию со стрелкой, синон может переопределить логику до того, как функция привязана к объекту маршрута hapi.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню