如何使用 Chai.should 测试某物是否是一个函数

How to test if something is a function with Chai.should

我想检查某些东西是否是 Chai.should 的函数。所以我做了

typeof(barfoo).should.equals('function')

DEMO

这导致

AssertionError: expected [Function] to equal 'function'
    at Context.<anonymous> (:73:31)

有人可以向我解释为什么这不起作用,因为如果我只是这样做

typeof(barfoo)

我得到一个字符串 function。虽然我现在已经用 instanceOf 解决了这个问题,但我真的很想了解这个

你需要额外的括号

(typeof(barfoo)).should.equals('function')

否则你的表达式被解释为

typeof ((barfoo).should.equals('function'))

如您所见,您在 barfoo 而不是 typeof barfoo 上调用 .should,然后获取最终结果的类型并将其丢弃。

这是因为typeof它不是一个函数,它是一个一元运算符[1] and have a lower precedence than Member Access operator (.) and Function Call[2]。因此 typeof 在此表达式中最后求值。

检查 barfoo 是否为函数的方法如下:

barfoo.should.be.a('function');

也可以使用 instanceOf 进行测试:

barfoo.should.be.instanceOf(Function);