Javascript 使用Cypress验证类似的JSON结构?
我得到了这个JSON树对象:Javascript 使用Cypress验证类似的JSON结构?,javascript,json,unit-testing,cypress,assertion,Javascript,Json,Unit Testing,Cypress,Assertion,我得到了这个JSON树对象: let obj1 = { "id": 3, "estatus": "Abierto", "obra": { "id": 96, "numeroRegistro": "C0001532",
let obj1 = {
"id": 3,
"estatus": "Abierto",
"obra": {
"id": 96,
"numeroRegistro": "C0001532",
"ubicacion": {
"id": 1,
"refDomicilio": "11073",
}
}
}
我想将其与另一个结构相同但价值不同的模型进行比较:
let obj2 = {
"id": 4,
"estatus": "Cerrado",
"obra": {
"id": 96,
"numeroRegistro": "C0001532",
"ubicacion": {
"id": 1,
"refDomicilio": "11073",
}
}
}
如果我在Cypress上使用此断言,则当值相似时,此断言有效。但是,如果它们不同,这个断言就会失败。我只想比较结构(树),即使值不同。
expect(obj1.to.eql(obj2)
值不同时出错:
预期{Object(id,estatus,…)}深度等于{Object(id,estatus,…)}
你知道我可以用哪种柏树上的说明来做这件事吗?您知道这样做的方法吗?您可以使用和:
我用这个图书馆:还有柏树
要安装库,请执行以下操作:
$ npm install chai-json-schema
转到cypress/support/index.js
并导入插件:
import chaiJsonSchema from 'chai-json-schema';
chai.use(chaiJsonSchema);
使用以下内容或类似内容生成JSON模式:
然后在测试中将对象与JSON模式进行比较:
expect(response.body).to.be.jsonSchema(ObjectSchema);
请注意,
JSON树对象
实际上只是一个JavaScript对象。JSON是一个字符串。您可以比较键。不是最理想的解决方案,但这是我能想到的第一个expect(Object.keys(obj1)).to.eql(Object.keys(obj2))
,expect(Object.keys(obj1.obra)).to.eql(Object.keys(obj2.obra))
,expect(Object.keys(obj1.obra.ubication)).to.eql(Object.keys(obj2.obra.ubication))
。您可能会编写一个函数来执行此操作,检查键上的值是否为对象,并递归检查其键是否为对象。@Nisala。。。对第一种方法听起来很合乎逻辑。因为,我认为Cypress可以做到这一点,而无需定制函数或类似的东西。也许,我用这个来解决我的问题。谢谢
expect(response.body).to.be.jsonSchema(ObjectSchema);