Why it calls the original method?
我正在针对我的主干应用编写jasmine规范。但是,我陷入了这个问题。不知道为什么我的间谍功能没有被调用。我想确保模型为
这是我的主干观点:
1 2 3 4 5 6 7 | class App.Views.Main extends Backbone.View initialize: () -> @model.on("change", @render, this) render: () -> console.log('rendering') return |
这是我的jasmine规格:
1 2 3 4 5 | it"should render when change is triggered", -> renderSpy = sinon.spy(@view, 'render') @view.model.trigger('change') expect(renderSpy.called).toBeTruthy() |
让我感到困惑的另一件事是,当该规范运行时,它实际上调用了原始方法。控制台日志始终显示。有人可以帮助我吗?
已更新:
正如莱昂纳多(Leonardo)在下面回答的那样,我通过以下更改进行了更改:
1 2 3 4 5 6 | it"should render when reset is triggered", -> renderSpy = sinon.spy(App.Views.Main.prototype, 'render') @view.model.trigger('change') expect(@renderSpy.called).toBeTruthy() renderSpy.restore() |
它可以工作,但是问题在于它调用了原始方法。我只是想知道为什么吗?
我认为这与这里发生的情况相同:
https://stackoverflow.com/a/9012788/603175
基本上,您需要在执行执行侦听事件的构造函数之前创建间谍,该构造函数将函数绑定到" this"上下文。