测试 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,
    //
};