我试图测试一个视图方法在我的模型触发事件时被调用。但这不起作用 - 而且我已经没有想到为什么会这样。下面是一个不正常的代码:触发Backbone模型事件不注册在我的Jasmine间谍
查看:
class View extends Backbone.View
initialize: ->
@.listenTo @model, 'request', @disableForm, @
disableForm: ->
console.log 'disableForm'
茉莉花测试:
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()
此代码在浏览器的罚款。
另外 - console.log在我运行测试时打印出'disableForm' - 所以模型事件触发了disableForm的调用,但是我的间谍没有选择它(我的期望失败)。我试图把它放到waitsFor方法中,但他也没有什么区别。
任何想法我错了?
啊是的。这是完全合理的。谢谢。 – Joerg 2013-04-26 05:51:38
测试模块中组件的推荐方法是什么?我可以在每次测试之前启动和停止模块,但这并不能模拟实际行为 – dbrin 2014-05-23 05:49:36
我必须处理这个问题的方法是在测试中很好地和早期地监视原型方法。所以: spyOn(View.prototype,'disableForm'); 这确保了当你的方法被绑定时,它们绑定到方法的一个窥探版本。这不是很好,并导致稍微不太好的封装测试,但它的工作原理。 另一种方法是将绑定的实现更改为接受方法名称而不是函数引用。这样你可以在每个事件上按名称调用方法。但改变绑定实现有点沉重! – Tom 2014-06-13 14:18:51