Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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
Javascript 使用Cypress验证类似的JSON结构?_Javascript_Json_Unit Testing_Cypress_Assertion - Fatal编程技术网

Javascript 使用Cypress验证类似的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",

我得到了这个JSON树对象:

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);