Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 验证是否已将Joi验证添加到hapi路线_Node.js_Validation_Testing_Hapijs_Joi - Fatal编程技术网

Node.js 验证是否已将Joi验证添加到hapi路线

Node.js 验证是否已将Joi验证添加到hapi路线,node.js,validation,testing,hapijs,joi,Node.js,Validation,Testing,Hapijs,Joi,我在代码中的多个地方重用了Joi模式,我想找到一种干净的方法来测试我的端点是否被分配了验证模式。这将很有帮助,因为我可以验证模式的行为是否符合我的预期,而无需在使用模式的任何地方重复相同的测试系列 如果我有hapi服务器路由: server.route({ method: POST, path: 'myUrl', config: { validate: { payload: validation.myJoiValidation, } } }) 如何测

我在代码中的多个地方重用了Joi模式,我想找到一种干净的方法来测试我的端点是否被分配了验证模式。这将很有帮助,因为我可以验证模式的行为是否符合我的预期,而无需在使用模式的任何地方重复相同的测试系列

如果我有hapi服务器路由:

server.route({
  method: POST,
  path: 'myUrl',
  config: {
    validate: {
      payload: validation.myJoiValidation,
    }
  }
})
如何测试validation.myJoiValidation对象是否已分配给config.validate.payload元素


我深入研究了hapi请求对象,发现我要查找的内容位于
请求.路由.设置.验证.有效载荷._inner.children
对象中,但是我真的不想依赖它来完成我的工作。

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


来自我的一个项目。它在上测试正则表达式联接验证。这在请求周围使用了一个小的promise包装器,名为。

如果您的测试上下文中运行了一台服务器,那么您可以获得与以下内容一起使用的验证模式:

const schema = server.match('post', 'myUrl').settings.validate.payload;
模式不能直接比较(与
Hoek.deepEqual
),但可以使用
joi.descripe
进行比较,因此:

expect(joi.describe(schema)).to.equal(joi.describe(validation.myValidation));
或者,如果您使用的是
mocha
/
chai
,我想这应该是:

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

我已经在做类似的事情了,但正在寻找替代方案。当在多个端点上使用相同的验证时,验证的单元测试会重复。我想将这些测试公诸于众,只对一个验证模式进行一组测试,然后简单地验证每个端点都有分配给它的验证模式。如果您不信任该模式,那么您将对该模式进行全面的单元测试(在任何路由之外),然后,您只需在路由上设置一个简单路径,以验证其上是否存在模式。在我们的团队中,我们的单元测试并不是为了复制hapi和joi而进行的。除非我们试图在一条特定的路线上做一些不寻常的事情,否则我们并没有彻底地测试每条路线上的每个模式。验证一条路线上是否存在模式是什么意思?你是指任何模式,但不是特定的模式?我想验证应用的确切模式的原因是,该应用程序对传入数据应有严格的要求。因此,我想验证一个模式是否如您所建议的那样包含所需的Joi验证,但也要验证在预期的位置分配了确切的模式。如果我在那里放了一个模式,我将编写一个单元测试来验证它不接受格式错误的负载。如果它是一个模式,我会使用很多,我会把这个模式保存在它自己的文件中,并为这个单元编写一系列测试来详尽地介绍它。路由上没有架构ID或任何可以验证的内容。如果您必须检查每个路由上的确切模式,只需编写一个函数,该函数接受一个路由并对其执行多个单元测试。