Как я могу заглушить хапи обработчик?
Я пытаюсь смоделировать функцию из обработчика маршрута...
Вот мой маршрут:
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({});
Кто-нибудь знает, как заставить это работать?
1 ответ
Я только что решил эту проблему, используя прокси-сервер над 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 как обычно.
Я думаю, это потому, что хапи регистрирует реальный объект, когда он вам нужен, и заглушает его после того, как это слишком поздно. Если вы поместите его в функцию стрелки, sinon может переопределить логику, прежде чем функция будет привязана к объекту маршрута хапи.