如何用chai-sorted对复杂对象数组的二级属性做排序校验?
解决chai-sorted校验复杂对象二级属性排序的问题
嘿,我之前也踩过这个坑!chai-sorted 默认对一级属性的校验很顺畅,但要搞定嵌套的二级属性排序,其实用它的自定义属性提取函数就能轻松解决,比硬凑点语法靠谱多了(还能避开版本兼容性问题)。
具体实现步骤
先假设你有这样的测试数据——一组带嵌套对象的数组:
const testData = [ { product: { price: 50 } }, { product: { price: 80 } }, { product: { price: 120 } } ];
方法1:自定义提取函数(推荐)
直接给sortedBy传一个函数,返回你要校验的二级属性值就行:
// 校验数组按二级属性升序排列 expect(testData).to.be.sortedBy(item => item.product.price); // 如果要校验降序,加上descending配置项 expect(testData).to.be.sortedBy(item => item.product.price, { descending: true });
方法2:点语法(部分版本支持)
如果你的chai-sorted是较新版本,也可以直接用点路径访问嵌套属性,写法更简洁:
expect(testData).to.be.sortedBy('product.price');
要是这个写法触发错误,基本就是版本不支持嵌套路径,换回方法1就好。
常见错误排查
要是还是报错,先检查这几点:
- 确认数组里每个元素都存在对应的二级属性,避免
undefined打乱排序逻辑 - 升级chai-sorted到最新版(执行
npm update chai-sorted),老版本对嵌套属性的支持有限 - 核对你的断言逻辑和实际数据的排序方向(升序/降序)是否一致
这样就能顺利完成二级属性的排序校验啦!
内容的提问来源于stack exchange,提问作者curvenut
相关产品推荐
相关产品推荐

