测试闭包中的隐藏函数是非常具有挑战性的,尤其是在 JavaScript 中,很多逻辑都被封装在闭包内,导致无法直接访问。例如,在以下代码中,我们无法直接测试内部函数 isNumber:


var add = ( function () {

  function isNumber(x) { return typeof x === 'number'; }

  return function add(a, b) {

    if (isNumber(a) &;&; isNumber(b))

      return a + b;

    return 'arguments should be numbers';

  };

} )();

虽然我们可以将 isNumber 移到外部库中,但通常情况下我们的逻辑可能过于具体,无法轻易拆分出来进行测试。