【问题标题】:how do I assert that a function was called?如何断言调用了一个函数?
【发布时间】:2013-01-22 00:08:28
【问题描述】:

我有一个山羊课:

class Goat
  constructor: (@headbutt) -> 
    @isCranky = true

  approach: -> 
    if @isCranky
      @headbutt()

我想编写一个 Mocha 测试来断言如果 isCranky 为真并且调用了方法,则调用了 headbutt()。

我能找到的唯一解释是 Ruby。尝试翻译它,但失败了。如何断言调用了正确的函数?我想我可以用一种 hacky 的方式解决它,但宁愿学习正确的方法。建议?

【问题讨论】:

    标签: node.js coffeescript mocha.js


    【解决方案1】:

    怎么样?

    describe 'Goat', ->
      it 'should call headbutt when approached', ->
        headbuttCalled = no
        headbutt = -> headbuttCalled = true
        goat = new Goat headbutt
    
        goat.approach()
    
        assert headbuttCalled
    

    如果您发现自己多次重复这种测试函数是否被调用的模式,您可能想要使用类似SinonJS 的东西,它提供了一个“间谍”构造:

    headbutt = sinon.spy()
    goat = new Goat headbutt
    
    goat.approach()
    
    assert headbutt.called
    

    【讨论】:

    • @IsaacCambron 使用 SimonJS,代码变得更加优雅,是的。但这是一个非常简单的例子,我认为包含一个完整的库来完成一个简单的额外代码行是不值得的。此外,我认为了解像 SimonJS 这样的东西如何发挥他们所做的“魔法”是很有价值的 :)
    • 好答案谢谢。我的老生常谈的答案与你写的非常相似,我相信我会有更多的地方可以断言 f(x) 被调用了,所以 Sinon 看起来是一个不错的选择。
    • 其实是SinonJS,不是SimonJS
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多