Почему он вызывает оригинальный метод?
Я пишу жасминовую спецификацию против моего приложения магистрали. Тем не менее, я застрял с этой проблемой. Не уверен, почему моя шпионская функция не вызывается. Я хочу убедиться, когда модель changed
должен позвонить #render
,
Вот мой основной взгляд:
class App.Views.Main extends Backbone.View
initialize: () ->
@model.on("change", @render, this)
render: () ->
console.log('rendering')
return
Вот моя спецификация жасмина:
it "should render when change is triggered", ->
renderSpy = sinon.spy(@view, 'render')
@view.model.trigger('change')
expect(renderSpy.called).toBeTruthy()
Другая вещь, которая смущает меня, - то, что, когда эта спецификация работает, она фактически вызывает оригинальный метод. Журнал консоли всегда отображается. Кто-нибудь может мне помочь?
Обновлено:
Как ответил ниже Леонардо, я делаю изменения со следующими изменениями:
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()
Это работает, но проблема в том, что он вызывает оригинальный метод. Мне просто интересно, почему?
1 ответ
Я думаю, что это то же самое, что здесь происходит:
По сути, вам нужно создать шпиона, прежде чем вы запустите конструктор, который выполняет прослушивание события, которое связывает функцию с контекстом "this".