如何访问提供给我在Sinon中存根的函数的参数?

时间:2015-05-10 00:26:36

标签: ember.js stub sinon

我试图测试使用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的帮助都将不胜感激。

感谢!

1 个答案:

答案 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...