Jasmine spyOn Marionette事件监听器

时间:2015-09-23 16:00:27

标签: testing jasmine marionette

我有一个Marionette ItemView定义如下:

@App.module "ZoneApp.Edit", (Edit, App) ->
  class Edit.View extends Marionette.ItemView

    template: "#zone_edit"

    events:
      'click button#removeZoneButton': 'removeZoneClicked'
      'click button#updateZone': 'updateZoneClicked'

    updateZoneClicked: (e)->
       e.preventDefault()
       @updateZone()

    updateZone: ->
       @trigger('zone:edit', @model)

我的测试看起来像这样:

describe 'ZoneApp.Edit', ->
  describe 'click updateZone button', ->
    beforeEach ->
      affix('script#zone_edit[type="text/template" form button#updateZone')

    it 'triggers updateZone()', ->
      view = new App.ZoneApp.Edit.View()

      spyOn(view, 'updateZoneClicked')
      view.render()
      view.$el.find('button#updateZone').click()
      expect(view.updateZoneClicked).toHaveBeenCalled()

此测试未通过。它说updateZoneClicked从未被调用过。

但是,如果我将隐藏的功能更改为updateZone,则可以正常工作:

describe 'ZoneApp.Edit', ->
  describe 'click updateZone button', ->
    beforeEach ->
      affix('script#zone_edit[type="text/template" form button#updateZone')

    it 'triggers updateZone()', ->
      view = new App.ZoneApp.Edit.View()

      spyOn(view, 'updateZone')
      view.render()
      view.$el.find('button#updateZone').click()
      expect(view.updateZone).toHaveBeenCalled()

我的猜测是,因为updateZoneClicked散列中events被处理,我的spyOn指令没有生效。

是否可以将间谍附加到这样的函数?

0 个答案:

没有答案