如何测试某些东西是否是Chai.should的函数

时间:2016-05-29 09:58:26

标签: javascript unit-testing chai

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

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

DEMO

这导致

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

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

typeof(barfoo)

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

3 个答案:

答案 0 :(得分:25)

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

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

答案 1 :(得分:6)

您需要额外的括号

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

否则您的表达式被解释为

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

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

这是因为typeof它不是一个函数,它是一元运算符[1],其优先级低于成员访问运算符(.)和函数调用[2] 。因此typeof在此表达式中最后被评估。

答案 2 :(得分:2)

还可以使用instanceOf进行测试:

barfoo.should.be.instanceOf(Function);