Node.js 验证是否已将Joi验证添加到hapi路线
我在代码中的多个地方重用了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, } } }) 如何测
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或任何可以验证的内容。如果您必须检查每个路由上的确切模式,只需编写一个函数,该函数接受一个路由并对其执行多个单元测试。