我正在我的代码中的多个位置重用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
对象,但是我真的不想依赖它来做我想做的事情
答案 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的请求的小承诺包装器。