Node.js "should" 库断言,它是如何工作的?

Node.js "should" library assertion, how does it work?

我们的 Mocha 测试套件有这一行:

model.getResourceDependencies.should.be.a.Function;

测试代码使用should

如您所见,上面的表达式既不是赋值也不是调用,是吗?

这是如何运作的?是否存在某种底层机制 onPropertyRead() 或类似的东西,以便即使没有显式调用函数,should 库也可以执行某些操作?

顺便说一下,要记住任何 should 或 chai API 几乎是不可能的。

should.js 使用 ES5 getterhttps://github.com/shouldjs/should.js/blob/9.0.2/lib/should.js#L105

chai 也使用它。 https://github.com/chaijs/chai/blob/3.5.0/lib/chai/interface/should.js#L35

一般来说,这种行为适用于 ES5 getter or ES6 Proxy (and Object.prototype.__noSuchMethod__ 在过去)