我试图测试使用Ember.run.debounce
的EmberJS应用。我想使用Sinon来存根Ember.run.debounce
,这样它就可以同步调用debounced方法。像这样:
debounceStub = sinon.stub(Ember.run, 'debounce')
debounceStub.callsArgWith(1, debounceStub.args[0][2])
使这段代码同步运行:
Ember.run.debounce(@, @handleData, list, 500)
但是使用未定义的参数调用handleData()
而不是list
。任何有关如何在list
电话中传递callsArgWith
的帮助都将不胜感激。
感谢!
答案 0 :(得分:1)
使用undefined调用handleData
的原因是因为您定义存根(callsWithArg(...)
)行为的时间点是在调用存根之前(通过执行您的单元) -under-test),所以args的引用还没有。
它有点难看,但一种解决方案是手动调用传递给debounce
的方法,类似......
debounceStub = sinon.stub(Ember.run, 'debounce')
//...execute unit-under-test so that `debounce` is called...
//Then pull out the arguments from the call
var callArgs = debounceStub.firstCall.args.slice();
var targetObject = callArgs.shift();
var methodToCall = callArgs.shift();
var methodArgsToPass = callArgs.shift();
//Manually invoke the method passed to `debounce`.
methodToCall.apply(targetObject, methodArgsToPass);
//perform your assertions...