gpt4 book ai didi

javascript - 如何 stub Hapi 处理程序?

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:38 24 4
gpt4 key购买 nike

我尝试从路由处理程序模拟函数...

这是我的路线:

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({});有人知道如何做到这一点吗?

最佳答案

我刚刚使用 proxyquire over 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 进行 stub 。

我认为这是因为 hapi 在您需要时注册了真实的对象,然后再 stub 它就为时已晚了。如果将其包装在箭头函数中,则 sinon 可以在函数绑定(bind)到 hapi 路由对象之前覆盖逻辑。

关于javascript - 如何 stub Hapi 处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45445678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com