【问题标题】:How to test if something is a function with Chai.should如何测试某些东西是否是 Chai.should 的功能
【发布时间】:2016-09-27 06:29:59
【问题描述】:

我想检查是否有 Chai.should 的功能。所以我做到了

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

DEMO

这会导致

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

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

typeof(barfoo)

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

【问题讨论】:

    标签: javascript unit-testing chai


    【解决方案1】:

    您可以通过以下方式检查 barfoo 是否为函数:

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

    【讨论】:

      【解决方案2】:

      你需要额外的括号

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

      否则你的表达式被解释为

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

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

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

      【讨论】:

      • 这是正确答案,但想添加断言可以通过barfoo.should.be.a('function')
      【解决方案3】:

      也可以使用 instanceOf 进行测试:

      barfoo.should.be.instanceOf(Function);
      

      【讨论】:

        猜你喜欢
        • 2012-09-26
        • 1970-01-01
        • 2012-06-04
        • 1970-01-01
        • 2016-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多