在Node中测试绑定函数

Testing a bound function in Node

本文关键字:绑定 函数 测试 Node      更新时间:2023-09-26

在我的模块的create方法中,我将一个函数绑定到一个变量。

var __ = function() {};
__.create = function() {
  var instance = new __();
  instance.bound = instance.functionToBindTo.bind(instance, 'boundParameter');
  return instance;
}
__.prototype.functionToBindTo = function(paramater1, parameter2) {
  //do stuff
} 

我现在想要能够测试调用'bound',将'boundParameter'设置为parameter1。

通常我会这样做…

'ensure parameter1 passed as first parameter' : function(test) {
  var newInstance = ClassToTest.create();
  newInstance.functionToBindTo = function(parameter1) {
    test.equal(parameter1, 'boundParameter');
  };
  newInstance.bound();
  test.done();
}

然而,由于.bind()实际上创建了一个新函数,这不起作用,因为我不能在测试中重写它。我知道可以选择滚动我自己的bind2方法并对其进行修补,但我希望有一种方法可以避免这种情况。

任何想法?

谢谢,马特

这可能不是正确的方法,但是对于上面的测试用例,您可以在ClassToTest原型对象中覆盖functionToBindTo:

'ensure parameter1 passed as first parameter' : function(test) {
  ClassToTest.prototype.functionToBindTo = function(parameter1) {
    test.equal(parameter1, 'boundParameter');
  };
  var newInstance = ClassToTest.create();
  newInstance.bound();
  test.done();
}