验证Joi验证已添加到hapi路由

时间:2018-01-16 22:31:06

标签: node.js validation testing hapijs joi

我正在我的代码中的多个位置重用Joi架构,我想找到一种干净的方法来测试我的端点被分配了验证架构。这将是有用的,因为我可以验证模式的行为方式与我期望的方式,而不必在使用模式的任何地方重复相同的测试系列。

如果我有hapi服务器路由:

server.route({
  method: POST,
  path: 'myUrl',
  config: {
    validate: {
      payload: validation.myJoiValidation,
    }
  }
})

我如何测试validation.myJoiValidation对象是否已分配给config.validate.payload元素?

我挖到了hapi请求对象,发现我正在寻找的是request.route.settings.validate.payload._inner.children对象,但是我真的不想依赖它来做我想做的事情

2 个答案:

答案 0 :(得分:1)

如果您在测试环境中运行服务器,则可以使用以下验证模式:

const schema = server.match('post', 'myUrl').settings.validate.payload;

无法直接比较架构(与Hoek.deepEqual一样,但是可以使用joi.describe进行比较,因此:

expect(joi.describe(schema)).to.equal(joi.describe(validation.myValidation));

或者,如果您使用的是mocha / chai,我想应该是:

expect(joi.describe(schema)).to.deep.equal(joi.describe(validation.myValidation));

答案 1 :(得分:0)

在您的单元测试中,使用request或类似程序包发出请求,其中有效负载未通过验证。确保响应代码为400。

Example test来自我的一个项目。它在this route上测试正则表达式连接验证。这使用了一个名为yarp的请求的小承诺包装器。