【问题标题】:Hook function call in node.jsnode.js 中的钩子函数调用
【发布时间】:2017-03-20 14:44:57
【问题描述】:

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

例子:

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

function b(){
  //do some stuff
}

【问题讨论】:

  • 你应该在a()....例如function a(b){ b() }

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您可以使用.apply()和arguments对象将a的通话数据转发到b函数中。

    function a(){
     return b.apply(this, arguments)
    } 
    
    function b(){
      //do some stuff
    }
    

    因此,无论this 的值和参数被赋予给a,都将转发给b,而b 返回的任何内容都将由a 返回。


    您似乎在较新的问题中尝试过,您可以创建一个将b 绑定到Function.prototype.call 方法的函数,以更简洁地完成此任务。

    var a = Function.call.bind(b);
    
    function b(){
      //do some stuff
    }
    

    现在当调用a 时,提供的第一个参数将成为b 的this 值,而提供的其余参数将成为b 的常规参数。


    如果您不关心this 的值,而只想传递所有参数,则可以将null 作为第一个参数绑定到.call,这样b 就会被转发所有提供的参数作为常规参数。

    var a = Function.call.bind(b, null);
    
    function b(){
      //do some stuff
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-11
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      相关资源
      最近更新 更多