【问题标题】:Testing a private prototype method in JS在 JS 中测试私有原型方法
【发布时间】:2014-08-07 05:36:36
【问题描述】:

我想知道是否可以在 js 中测试原型的私有方法。我怀疑这是不可能的,但也许有人会让我感到惊讶......

例如,假设我有以下班级餐厅:

function Restaurant() {
}

Restaurant.prototype = (function() {
    var private_stuff = function() {
    // Private code here
    };

    return {

        constructor:Restaurant,

        use_restroom:function() {
            private_stuff();
        }

    };
})();

是否可以为 private_stuff 方法编写单元测试?我使用 jasmine 进行单元测试,但我想这并不重要。

谢谢, 利奥

【问题讨论】:

  • 通常单元测试只适用于公共方法。只要use_restroom 在所有情况下都是正确的,谁在乎private_stuff 的工作原理?
  • 我不同意这一点。使用其他私有方法的公共方法可能很难用单元测试完全覆盖。有时你想覆盖私有方法。这就是为什么我们有像 powermock 这样的框架用于 java 单元测试的原因。

标签: javascript unit-testing prototype private


【解决方案1】:

上次我遇到类似的事情时,我不得不专门公开私人的东西,这听起来很奇怪:

function Restaurant() {
}

Restaurant.prototype = (function() {
    var private_stuff = function() {
    // Private code here
    };

    var internalMethods = {};
    if (window.exposeInteralMethods) {
      internalMethods = {
        private_stuff: private_stuff
      };
    }

    return {   
        internalMethods: internalMethods,
        constructor:Restaurant,    
        use_restroom:function() {
            private_stuff();
        }

    };
})();

如果有人在您之外设置window.exposeInteralMethods,您将处于危险之中,但有时需要对 squirmware 进行 2x4 调试。

【讨论】:

    猜你喜欢
    • 2017-06-19
    • 1970-01-01
    • 2019-02-01
    • 2020-11-08
    • 2019-08-04
    • 1970-01-01
    • 2019-01-23
    • 2016-03-01
    相关资源
    最近更新 更多