【发布时间】:2013-01-07 06:49:26
【问题描述】:
我的一个 Backbone 视图中有这段 CoffeeScript 代码:
myMethod: ->
# some code here
$.when(
# ...
).done(
@myCallback
)
我想测试 myCallback 在 done 块中是否被调用。
我不确定如何在 Mocha.js + Sinon.js 中执行此操作。我能够监视 jquery 并检查 when 方法是否被调用:
spy = sinon.spy($, 'when')
@view.myMethod()
spy.called.should.be.true
spy.restore()
但是我不能对 done 块做同样的事情,因为如果我理解正确的话,它与 when 方法返回的延迟对象有关。
我也试过这样的:
# NOT WORKING CODE
stub = sinon.stub($.Deferred(), 'done').returns
myCallback: sinon.stub()
@view.myMethod()
stub.called.should.be.true
stub.restore()
但仍然得到:
expected false to be true
有什么想法吗? :)
【问题讨论】:
-
您不应该使用
@myCallback而不是@myCallback()吗?只是一个盲目的猜测。但是 $.done 不存在。done是 promise 对象的一部分,所以我猜它是$.Deferred().done -
@pocesar 你是对的,这是一个错字(一旦我没有使用复制和粘贴......对不起!)。我同意你关于延期的看法,我这样写是为了明确我想要实现的目标。我试图对此进行监视,并且还尝试对 promise 对象进行存根,但没有成功。进一步的想法?
标签: jquery backbone.js callback sinon spy