You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mocha/Chai断言异常咨询:数组值相同却触发断言错误

Mocha/Chai数组断言失败?看这里!

我之前踩过完全一样的坑!你遇到的Unexpected Assertion Error根本不是数组内容不一致,问题出在你用的assert.equal()方法上——它对数组这种引用类型,比较的是两个值的内存地址是否相同,而不是数组里的元素是否匹配。

举个简单的例子:你代码里的a是splitNumAndOper函数返回的新数组,而断言里写的[6,'+',4,'+',3]是另一个全新创建的数组,这俩在内存里是两个独立的对象,哪怕元素完全一样,assert.equal()也会判定它们不相等。

解决方法很简单:用深比较断言

Chai专门提供了针对数组/对象内容比较的方法,根据你用的断言风格选就行:

如果你继续用assert风格(和你现有代码一致)

把assert.equal()换成assert.deepEqual(),它会递归检查两个值的内部结构和内容:

describe("Util.SplitNumAndOper Tests", function(){ 
  it('should have "6+4+3" return [6,"+",4,"+",3]', function(){ 
    let a = util.splitNumAndOper("6+4+3"); 
    assert.deepEqual(a,[6,'+',4,'+',3]); // 替换成deepEqual
  }) 
})

要是你想试试更语义化的expect/should风格

可以这么写,可读性会更好:

// expect风格
expect(util.splitNumAndOper("6+4+3")).to.deep.equal([6,'+',4,'+',3]);

// should风格
util.splitNumAndOper("6+4+3").should.deep.equal([6,'+',4,'+',3]);

小提醒

不光是数组,对象、嵌套结构的比较都会遇到这个问题——只要是引用类型,都别用equal()做浅比较,一定要用深比较的断言方法哦。

内容的提问来源于stack exchange,提问作者Vincent Tang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:54:10