检查嵌套的 属性 是否有一个对象与 expect 中的目标部分匹配
Check if a nested property has an object that partially matches a target in expect
我有一个这样的对象:
> const expect = require('chai').expect
> r = { loadedElementData: { userIdRecord: { name: 'Chiara', surname: 'Fabbietti', id: 1 } }, resolvedIdParamsValues: { users: 1 }, resolvedListFilter: {}, totalLoads: 1 }
我可以检查具有特定内容的对象是否在 r
的某个深处——这不会抛出:
> expect(r).to.have.nested.deep.property('loadedElementData.userIdRecord', { name: "Chiara", surname: "Fabbietti", id: 1 })
但是,我想检查 部分 个对象。所以,即使比较对象是部分匹配,我也希望这样的事情通过:
> expect(r).to.have.nested.deep.property('loadedElementData.userIdRecord', { id: 1, name: 'Chiara' })
这显然行不通,因为它将检查对象的深度相等性。
这在理论上应该可行:
expect(r).to.nested.include({'loadedElementData.userIdRecord': { id: 1, name: 'Chiara' } })
但是没有。
这应该真的有效:
expect(r).to.deep.nested.include({ 'loadedElementData.userIdRecord': { id: 1, name: 'Chiara' } })
但是没有。
我可以检查一个 属性(仅 'id'):
expect(r).to.nested.include({ 'loadedElementData.userIdRecord.id': 1})
但是我只能检查id
,不能同时检查name
。
我可以分两步完成:
> expect(r).to.include.nested.property('loadedElementData.userIdRecord')
> expect(r.loadedElementData.userIdRecord).to.include({ id: 1 })
但这是一个两步过程 -- 我可以一步完成吗?
如果您检查他们的 Github 问题,维护者承认自 2020 年以来对象子集的嵌套包含不起作用。参考:chai Github
这是 Chai 在比较两个对象时决定是进行深度相等还是严格相等的行:https://github.com/chaijs/chai/blob/a8359d3d15779a23a7957a4c52539d48de2763e0/lib/chai/core/assertions.js#L1892.
_.eql
是对 Chai 的 deep equal own library implementation.
的引用
在 deep-eql
库中,流程将到达此 function,它进行松散相等比较而不是部分比较。
我有一个这样的对象:
> const expect = require('chai').expect
> r = { loadedElementData: { userIdRecord: { name: 'Chiara', surname: 'Fabbietti', id: 1 } }, resolvedIdParamsValues: { users: 1 }, resolvedListFilter: {}, totalLoads: 1 }
我可以检查具有特定内容的对象是否在 r
的某个深处——这不会抛出:
> expect(r).to.have.nested.deep.property('loadedElementData.userIdRecord', { name: "Chiara", surname: "Fabbietti", id: 1 })
但是,我想检查 部分 个对象。所以,即使比较对象是部分匹配,我也希望这样的事情通过:
> expect(r).to.have.nested.deep.property('loadedElementData.userIdRecord', { id: 1, name: 'Chiara' })
这显然行不通,因为它将检查对象的深度相等性。
这在理论上应该可行:
expect(r).to.nested.include({'loadedElementData.userIdRecord': { id: 1, name: 'Chiara' } })
但是没有。 这应该真的有效:
expect(r).to.deep.nested.include({ 'loadedElementData.userIdRecord': { id: 1, name: 'Chiara' } })
但是没有。
我可以检查一个 属性(仅 'id'):
expect(r).to.nested.include({ 'loadedElementData.userIdRecord.id': 1})
但是我只能检查id
,不能同时检查name
。
我可以分两步完成:
> expect(r).to.include.nested.property('loadedElementData.userIdRecord')
> expect(r.loadedElementData.userIdRecord).to.include({ id: 1 })
但这是一个两步过程 -- 我可以一步完成吗?
如果您检查他们的 Github 问题,维护者承认自 2020 年以来对象子集的嵌套包含不起作用。参考:chai Github
这是 Chai 在比较两个对象时决定是进行深度相等还是严格相等的行:https://github.com/chaijs/chai/blob/a8359d3d15779a23a7957a4c52539d48de2763e0/lib/chai/core/assertions.js#L1892.
_.eql
是对 Chai 的 deep equal own library implementation.
在 deep-eql
库中,流程将到达此 function,它进行松散相等比较而不是部分比较。