测试 hapi 路由时根据请求设置参数
Set params on request when testing hapi routes
我目前正在为我们的 hapi 路由编写一些测试。我要测试的路线如下所示:
server.route(
{
method: 'POST',
path: '/',
options: {
tags: ['api'],
cors: true,
handler: async (req: Hapi.Request | any, h: Hapi.ResponseObject) => {
if (!req.params.userId) {
throw Boom.badRequest();
}
return 200;
}
}});
所以我的测试是这样的:
it('should return 200', async () => {
const request : ServerInjectOptions = {
url: '/user',
method: 'POST',
payload: {
email: 'e@email.de',
password: 'secred',
firstname: 'John',
lastname: 'Doe'
},
app: {}
};
const response = await server.inject(request);
expect(response.statusCode).toEqual(200);
});
如您所见,路由需要 params 数组中的一个名为 userId 的参数,但我无法在 ServerInjectOptions 对象上设置该参数。我得到的错误是 属性 在 ServerInjectOptions 类型上不存在。
有没有其他方法可以设置参数数组?我没有在文档中找到任何东西,也许我错过了它,有人可以告诉我在哪里可以找到它。
提前致谢
对于路线,我相信您可以像这样将参数名称添加到路径中:
server.route(
{
method: 'POST',
path: '/:userId',
//
}});
对于测试,您应该能够将参数添加到 url 选项:
const request : ServerInjectOptions = {
url: '/user/parameterYouNeedToAdd',
//
};
或者如果参数是一个变量:
const request : ServerInjectOptions = {
url: '/user/' + parameterYouNeedToAdd,
//
};
我目前正在为我们的 hapi 路由编写一些测试。我要测试的路线如下所示:
server.route(
{
method: 'POST',
path: '/',
options: {
tags: ['api'],
cors: true,
handler: async (req: Hapi.Request | any, h: Hapi.ResponseObject) => {
if (!req.params.userId) {
throw Boom.badRequest();
}
return 200;
}
}});
所以我的测试是这样的:
it('should return 200', async () => {
const request : ServerInjectOptions = {
url: '/user',
method: 'POST',
payload: {
email: 'e@email.de',
password: 'secred',
firstname: 'John',
lastname: 'Doe'
},
app: {}
};
const response = await server.inject(request);
expect(response.statusCode).toEqual(200);
});
如您所见,路由需要 params 数组中的一个名为 userId 的参数,但我无法在 ServerInjectOptions 对象上设置该参数。我得到的错误是 属性 在 ServerInjectOptions 类型上不存在。
有没有其他方法可以设置参数数组?我没有在文档中找到任何东西,也许我错过了它,有人可以告诉我在哪里可以找到它。
提前致谢
对于路线,我相信您可以像这样将参数名称添加到路径中:
server.route(
{
method: 'POST',
path: '/:userId',
//
}});
对于测试,您应该能够将参数添加到 url 选项:
const request : ServerInjectOptions = {
url: '/user/parameterYouNeedToAdd',
//
};
或者如果参数是一个变量:
const request : ServerInjectOptions = {
url: '/user/' + parameterYouNeedToAdd,
//
};