【问题标题】:How can I stub a jQuery method with Sinon?如何使用 Sinon 存根 jQuery 方法?
【发布时间】:2014-07-17 00:57:36
【问题描述】:

我在 Ember 视图中有以下代码:

  postRender: ->
    @_super()
    @$().tooltipster({
      content: @$().data('tooltip')
      contentAsHTML: true
    })

我正在尝试测试tooltipster()postRender() 执行时被调用,但我在使用Sinon 监视tooltipster() 时遇到了一些麻烦。到目前为止,这是我的规格:

  describe 'postRender', ->
    it 'initializes tooltips', ->
      spy = sinon.spy(view.$(), 'tooltipster')
      view.postRender()
      spy.should.be.calledOnce
      view.$().tooltipster.restore()

但这抱怨view.$() 未定义。

关于如何完成这项工作的任何想法?

谢谢!

【问题讨论】:

    标签: jquery ember.js coffeescript sinon chai


    【解决方案1】:

    jQuery 对象从 $.fn 对象获取类似 $().css() 的方法。 jQuery plugins like tooltipster are registered there, too。监视$.fn.tooltipster 是您想要做的:

    spy = sinon.spy view.$.fn, 'tooltipster'
    view.postRender()
    spy.should.be.calledOnce
    spy.restore() # or view.$.fn.tooltipster.restore()
    

    【讨论】:

      【解决方案2】:

      我很确定你应该发送一个函数,而不是函数对 sinon 间谍的响应。

      spy = sinon.spy(view.$, 'tooltipster')
      

      话虽如此,$ 方法不太可能在不遵循正确约定的视图上定义。而且您并没有真正测试 Ember 设置 $ 方法的能力,因此如果需要,您可以自行设置。像这样的:

      var test = false;
      
      view.$ = function(){
        return {
          data: function(attr){
            return 'something';
          },
          tooltipster: function(hash){
            test = true;
          }
        };
      }
      view.postRender();
      assert(test, 'tooltipster should have been called, and test is true');
      

      【讨论】:

        猜你喜欢
        • 2015-04-18
        • 2019-09-12
        • 2018-07-16
        • 2021-06-10
        • 2018-05-31
        • 1970-01-01
        • 2015-01-18
        • 2014-08-08
        • 2017-07-09
        相关资源
        最近更新 更多