Chai 中文文档 下载 App

Chai 全局配置选项 - config includeStack showDiff truncateThreshold

配置在哪里

Chai 的配置通过 chai.config 对象访问,所有设置都是顶级属性。应该在测试套件开始前统一配置(比如 .mocharc.js 的 require 入口文件中)。

const chai = require('chai');

chai.config.includeStack = true;
chai.config.showDiff = false;
chai.config.truncateThreshold = 0;

三个核心配置项

includeStack(默认 false)

控制断言错误是否包含完整堆栈跟踪。默认关闭——错误消息只显示一行,干净利落:

AssertionError: expected 2 to equal 3

开启后会在错误消息下方追加堆栈:

AssertionError: expected 2 to equal 3
    at Context.<anonymous> (/path/to/test.js:5:12)
    at callFn (/path/to/mocha/lib/runnable.js:348:21)
    ...

什么时候开启:

showDiff(默认 true)

控制断言错误消息中是否包含 diff 标记。默认开启——复杂对象比较失败时,会在消息中高亮显示差异:

AssertionError: expected [ Array(2) ] to deeply equal [ Array(2) ]
+ expected - actual

 [
   1,
-  3
+  2
 ]

关闭后只显示"expected X to deeply equal Y",不显示差异细节。

什么时候关闭:

truncateThreshold(默认 40)

控制断言错误消息中实际值和期望值的字符长度阈值。超过阈值时自动截断并省略:

chai.config.truncateThreshold = 40;

const longStr = 'a'.repeat(100);
expect(longStr).to.equal('b'.repeat(100));

// 错误消息中 longStr 会被截断显示
// "expected 'aaaa...' (100 chars) to equal 'bbbb...' (100 chars)"

设为 0 禁用截断,完整显示所有值:

chai.config.truncateThreshold = 0;

什么时候调整:

完整配置示例

在 .mocharc.js 中统一配置:

// test/setup-chai.js
const chai = require('chai');

chai.config.includeStack = true;   // 开启堆栈
chai.config.showDiff = true;        // 保持 diff
chai.config.truncateThreshold = 0;  // 不截断

// 选一种风格全局注册
chai.should();  // 或者: require('chai/register-should')

module.exports = chai;

然后 .mocharc.js 里引用:

module.exports = {
  require: ['./test/setup-chai.js'],
  timeout: 5000,
  reporter: 'spec'
};

浏览器端配置

在浏览器中同样通过 chai.config 配置:

<script src="chai.js"></script>
<script>
  chai.config.truncateThreshold = 0;
  chai.config.includeStack = true;
</script>

插件可能增加的配置

某些插件会向 chai.config 添加自己的配置项。比如 chai-subset 可能支持调整子集匹配的严格程度。装了插件如果发现有 config 项,以插件文档为准。

不要做的事

如果某个测试需要特殊配置,自己保存原值再恢复:

const original = chai.config.truncateThreshold;
chai.config.truncateThreshold = 0;
// ... 特殊测试 ...
chai.config.truncateThreshold = original;

但这种场景很罕见,一般在全局层面配置一次就够了。

下一步

配置好风格和全局参数,接下来进入核心 API 的学习: