检查嵌套的 属性 是否有一个对象与 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,它进行松散相等比较而不是部分比较。