Postman中使用Lodash比较对象忽略指定键失效如何解决
问题根因
_.omit默认仅删除对象的顶层自有属性:
- 顶层的
page_view字段可以被正常剔除 update_time是挂载在deletion下的二级嵌套属性,顶层对象不存在该名称的属性,所以这部分动态值完全没被移除,两个对象的deletion.update_time值不一致,最终等值判断返回false。
可行方案
以下两种方案都可以在Postman内置的Lodash环境下正常运行:
方案1:逐层处理字段
先剔除顶层动态字段,再单独处理嵌套对象内的动态字段,逻辑透明无兼容问题:
var obj1 = { name: "James", age: 17, page_view: "2", creation: "13-03-2016", deletion: { "article_id": 4469568, "update_time": 1226, } } var obj2 = { name: "James", age: 17, page_view: "62", creation: "13-03-2016", deletion: { "article_id": 4469568, "update_time": 12265, } } const normalize = (target) => { const res = _.omit(target, ['page_view']); res.deletion = _.omit(res.deletion, ['update_time']); return res; } var result = _.isEqual(normalize(obj1), normalize(obj2)); if (!result) { pm.expect.fail("Pro and Sta are different") }
方案2:传入嵌套路径
_.omit支持传入数组格式的属性路径精准定位嵌套字段,不需要逐层手动处理:
var result = _.isEqual( _.omit(obj1, ['page_view', ['deletion', 'update_time']]), _.omit(obj2, ['page_view', ['deletion', 'update_time']]) ); if (!result) { pm.expect.fail("Pro and Sta are different") }
注意:不要使用字符串格式的嵌套路径
'deletion.update_time',Postman内置的Lodash版本偏旧,对字符串嵌套路径的支持存在兼容问题,传数组路径['deletion', 'update_time']可以适配所有版本。
内容的提问来源于stack exchange,提问作者VTTP
相关产品推荐
相关产品推荐

