触发Backbone模型事件不会在我的Jasmine间谍中注册

Joe*_*erg 3 testing backbone.js jasmine

我试图测试当我的模型触发事件时调用视图方法.但这不起作用 - 我已经没想到为什么会这样.这是不起作用的代码:

视图:

class View extends Backbone.View
  initialize: ->
    @.listenTo @model, 'request', @disableForm, @

  disableForm: ->
    console.log 'disableForm'
Run Code Online (Sandbox Code Playgroud)

茉莉花测试:

describe "AJAX events", ->

  it "when starting an AJAX request, disable the form", ->
    model = new Backbone.Model()
    view = new Backbone.View( { model: model })
    view.render()

    spyOn(view, 'disableForm')
    view.delegateEvents()

    model.trigger 'request'
    expect(view.disableForm).toHaveBeenCalled()
Run Code Online (Sandbox Code Playgroud)

此代码在浏览器中正常工作.

另外 - 当我运行测试时,console.log会打印'disableForm' - 所以模型事件触发了对disableForm的调用,但是我的间谍没有选择它(我的期望失败).我已经尝试将它放入waitsFor方法,但他也没有什么区别.

我出错的任何想法?

And*_*rle 8

问题是,spyOn用函数替换disableForm视图中的spy函数.但此时模型已绑定到原始函数,因此替换视图中的函数对绑定到事件侦听器的函数没有影响.当您在模型上触发事件时,将调用原始函数而不是间谍.