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

Verify Joi validation was added to hapi route

我在我的代码中的多个地方重用了 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 对象中,但我真的不想依赖它来完成我正在尝试的事情要做。

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

Example test from a project of mine. It tests a regex Join validation on this route. This uses a small promise wrapper around request called yarp.

如果您的测试上下文中有服务器 运行,您可以获得与以下一起使用的验证架构:

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

Schemas 无法直接比较(与 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));