【问题标题】:Is it possible to check if a function arguments bound correctly using Sinon.JS是否可以使用 Sinon.JS 检查函数参数是否正确绑定
【发布时间】:2016-05-09 19:39:03
【问题描述】:

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

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

【问题讨论】:

  • 我相信测试 A 是否被正确的参数调用会很好。毕竟你可能不想测试bind
  • @РоманПарадеев,当我们测试 A 时,它有责任为其返回的函数绑定参数。不是吗?我认为如果我们测试一些使用参数调用 A 的函数 B,您的建议会更容易接受。
  • 您的示例中的绑定是一个实现细节。您可以使用闭包为A 实现相同的行为,并且测试不应该开始失败,因为函数仍然正确。

标签: javascript unit-testing sinon sinon-chai


【解决方案1】:

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

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多