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

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

本文关键字:是否 参数 绑定 函数 检查 可以使 Sinon JS      更新时间:2023-09-26

假设我们有一个函数,它返回一个函数并为其绑定参数:

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)