我有一个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
指令没有生效。
是否可以将间谍附加到这样的函数?