如何访问提供给我在 Sinon 中存根的函数的参数?
How can I access the arguments that were provided to a function that I've stubbed in 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
进行调用。任何有关如何在 callsArgWith
调用中传递 list
的帮助将不胜感激。
谢谢!
之所以使用 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...
我正在尝试测试使用 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
进行调用。任何有关如何在 callsArgWith
调用中传递 list
的帮助将不胜感激。
谢谢!
之所以使用 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...