为什么称它为原始方法?

时间:2012-10-21 03:24:17

标签: backbone.js jasmine sinon

我正在为我的骨干应用程序编写茉莉花规格。但是,我遇到了这个问题。不知道为什么我的间谍功能没有被调用。我想确保模型何时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 个答案:

答案 0 :(得分:1)

我认为这与此处发生的情况相同:

https://stackoverflow.com/a/9012788/603175

基本上,您需要在执行执行事件监听的构造函数之前创建间谍,这会将函数绑定到“this”上下文。