在node.js中调用Hook函数

时间:2017-03-20 14:44:57

标签: javascript node.js unit-testing ecmascript-6

有没有办法在node.js中调用之前挂钩函数调用或重新定义函数?我需要这个用于单元测试,可能是代理还是一些测试库和选项?

示例:

//some js file
function a(){
 b()// need to be hooked
} 

function b(){
  //do some stuff
}

2 个答案:

答案 0 :(得分:0)

你可以做的是在目标函数周围创建一个包装器,并在执行之前执行你需要做的任何操作,例如:

const tmp = b
function b {
  doSomething()
  maybeBroadcastAnEvent()
  tmp() //run original function
}

答案 1 :(得分:0)

您可以将.apply()arguments对象结合使用,将a的通话数据转发到b功能。

function a(){
 return b.apply(this, arguments)
} 

function b(){
  //do some stuff
}

因此,this的任何a值和参数都会转发到b,而b将返回a次返回的任何内容。< / p>

正如您在新问题中尝试的那样,您可以创建一个将b绑定到Function.prototype.call方法的函数,以更简洁地完成此操作。

var a = Function.call.bind(b);

function b(){
  //do some stuff
}

现在调用a时,提供的第一个参数将成为this的{​​{1}}值,提供的其余参数将成为b的常规参数

如果您不关心b值,并且只想传递所有args,则可以将this绑定为null的第一个参数,以便{ {1}}只会将所有提供的参数转发为常规参数。

.call