如何让 Chai 使用 toString() 显示实际值和预期值

Jas*_*oyd 7 chai

我最近从 should.js 切换到 chai.js,因为我发现前者在基于浏览器的测试中造成了障碍。更改不需要对我的测试套件进行任何更改,因为支持语法,但我看到失败测试的输出不再以有用的方式向我显示实际值和预期值:

AssertionError: expected [ Array(9) ] to deeply equal [ Array(9) ]
Run Code Online (Sandbox Code Playgroud)

通过添加以下行,我可以让它吐出这些值的表示:

chai.config.truncateThreshold = 0;
Run Code Online (Sandbox Code Playgroud)

然而,这导致每个值都被详尽地输出,包括函数和原型属性。也很没用。

那么是否有某种方式让 chai 表现得像 should.js 一样,其中使用它们的 toString() 方法显示实际/预期值?

hum*_*tim 0

让 Chai (v1.10.0) 显示实际值和预期值的一种方法.toString()utils.objDisplay在运行时对其进行修补。

基本要点是:

chai.use(function(_chai,utils) {
  utils.objDisplay = function(obj) { return obj+''; };
});
Run Code Online (Sandbox Code Playgroud)

然而,由于 Chai!==在内部实例化重复(即:)模块引用的方式,在实践中执行起来稍微复杂一些;在这种情况下,也需要进行修补utils.getMessage

这是一个小提琴,用于演示整个补丁以及Array对象自定义格式的简单示例:https://jsfiddle.net/humbletim/oc1tnqpy/