Почему он вызывает оригинальный метод?

Я пишу жасминовую спецификацию против моего приложения магистрали. Тем не менее, я застрял с этой проблемой. Не уверен, почему моя шпионская функция не вызывается. Я хочу убедиться, когда модель 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 ответ

Решение

Я думаю, что это то же самое, что здесь происходит:

/questions/9778513/pochemu-etot-shpion-sinon-ne-vyizyivaetsya-kogda-ya-zapuskayu-etot-test/9778524#9778524

По сути, вам нужно создать шпиона, прежде чем вы запустите конструктор, который выполняет прослушивание события, которое связывает функцию с контекстом "this".

Другие вопросы по тегам