javascript - 您如何测试仅在闭包范围内可见的 javascript 方法?

标签 javascript unit-testing closures jasmine

假设我有以下 javascript:

function Foo() {

    function privateStuff() {
       //do private stuff
    }

    this.publicStuff = function() {
        privateStuff();
        //do other stuff
    }

}

通过执行以下操作很容易测试 publicStuff():

var myFoo = new Foo();
myFoo.publicStuff();
//all the assertions

但是,我希望能够将 privateStuff() 方法作为它自己的单元进行测试。我不确定我怎么能自己调用​​它。我知道使用 Java(我更熟悉它)可以使用反射来测试私有(private)方法,但我想知道是否有任何方法可以自行测试这些函数。如果没有通用的方法,我已经开始研究 Jasmine运行我的单元测试。该框架是否为此提供了任何功能?

最佳答案

按照您将代码放在那里的方式,您不能。您不允许任何对象对 privateStuff 进行范围内访问。在我看来,您需要阅读闭包的概念(这是 JavaScript 的基础)。

每当您在 JS 中使用 f() { ... } 构造(以及其他几个,如 try-catch block )时,您总是隐式创建一个闭包.像您那样嵌套函数是完全合法的,但除非您为外部函数提供对内部函数的外部引用,否则只能从外部函数内部访问内部函数。

来自 Mozilla :

You can nest a function within a function. The nested (inner) function is private to its containing (outer) function. It also forms a closure.

A closure is an expression (typically a function) that can have free variables together with an environment that binds those variables (that "closes" the expression).

Since a nested function is a closure, this means that a nested function can "inherit" the arguments and variables of its containing function. In other words, the inner function contains the scope of the outer function.

  • The inner function can be accessed only from statements in the outer function.
  • The inner function forms a closure: the inner function can use the arguments and

尽管 Mozilla 文档延续了这一点,但在 Javascript 中说东西是 privatepublic 是有点不正确的,因为命名法在大多数编程语言中都有非常明确的含义(如 C++ 和 Java)与多态行为或继承相关。就 JS 而言,最好将其视为范围受限的,并尝试深入了解闭包。

关于javascript - 您如何测试仅在闭包范围内可见的 javascript 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12084590/

相关文章:

python - 如何在执行 celery 任务后测试是否发送了电子邮件

scala - 成功和失败函数参数 Scala 模式

lambda - C++0x 闭包的未定义行为 : I

oop - 在 TypeScript 中访问外部类的成员

javascript - 点击后退按钮时是否存在跨浏览器onload事件?

javascript - 删除JS数组中的最小数字

java - 模拟类的所有实例

django - 完整性错误 : duplicate key value in django unit test

javascript - 无需卡即可将图像分享到 Twitter

javascript - 在 PHP 中使用正则表达式按字母顺序对字母进行排序