是否可以使用 Sinon.JS 检查函数参数是否正确绑定

Is it possible to check if a function arguments bound correctly using Sinon.JS

假设我们有一个函数 returns 一个函数并将参数绑定到它:

function A(x, y){
    return function(x, y){...}.bind(this, x, y);
}

现在我们想知道函数 A 是否正确绑定了参数:

var resultedFunction = A();
var spy = sinon.spy(resultedFunction);
spy();

问题 - 是否可以知道参数绑定是否正确?我试过了,但它是一个空数组

spy.firstCall.args
spy.getCall(0).args

我终于想到了一些窍门。如果返回函数不是匿名的,那么我们可以监视它并稍后检查参数:

var obj = {
  B: function(){
    ...
  },
  A: function(x, y){
    return this.B.bind(this, x, y);
  }
}
var x = 1, y = 2;
var spy = sinon.spy(obj, "B");
var resultedFunction = obj.A(x, y);

resultedFunction();

expect(spy.firstCall.args[0]).to.equals(x)
expect(spy.firstCall.args[0]).to.equals(y)