我正在使用API,并且应该仅根据权限返回实际对象属性的子集。我在mocha和chai中编写我的测试,并希望测试这样的事情(给定res
是来自服务器的响应对象,res.body
包含接收到的JSON数据):
res.body.should.not.contain.properties.except(['prop1', 'prop2.subprop'])
在这种情况下res.body.prop1
可以是任何类型的对象,res.body.prop2
只允许包含属性subprop
- 它也可以是任何类型的对象。
现在,我可以编写自定义函数来测试这个,但是我认为其他人已经有类似的问题了,或者有一个chai的扩展名可能或者我可以使用的其他库。
答案 0 :(得分:1)
开箱即用,我不认为Chai提供了一种构建这样的查询的方法。但是,JSON Schema非常适合测试对象是否与特定格式匹配。幸运的是,Chai JSON Schema Plugin存在。使用它,结果如下所示:
chai.use(require('chai-json-schema'));
var bodySchema = {
title: 'response body',
type: 'object',
required: ['prop1', 'prop2'],
additionalProperties: false,
properties: {
prop1: {},
prop2: {
type: 'object',
required: ['subprop'],
additionalProperties: false,
properties: {
subprop: {}
}
}
}
};
res.body.should.be.jsonSchema(bodySchema);
一个简短的解释:
required
属性采用一系列必需属性。如果prop1
或prop2
实际上是可选的,请将其从此数组中删除(或将其全部删除)。additionalProperties: false
确保不允许使用properties
哈希中定义的属性以外的属性。prop2
包含一个子模式,它可以包含与根模式相同的字段,并指定子属性的格式。当然,这些架构可能会变得有点大,但验证功能也会增长。当然,您可以将模式设置为真正的JSON文件,以将其与其余代码分开。