在许多框架中,内部函数变量被用作私有变量,例如
Raphael = (function(){
var _private = function(a,b) {return a+b;};
var _public = function(a) {return _private(a,a);}
var object = {mult2:_public};
return object;
})();
在这里,我们无法从全局命名空间访问名为 的变量private
,因为它是第一行中匿名函数的内部变量。
有时这个函数包含一个大的 Javascript 框架,所以它不会污染全局命名空间。
我需要对Raphael
内部使用的某些对象进行单元测试(在上面的示例中,我希望对对象运行单元测试private
)。我该如何测试它们?
编辑:我收到了关于应该测试公共接口的单元测试的评论。
让我指定一个用例。我正在编写一个名为Raphael
. 这个库应该只向全局命名空间添加一个名称,仅此而已。这是 Javascript 的特殊要求,因为 Javascript 没有命名空间。
假设Raphael
使用链表。如果 Javascript 有包的概念,我会做
require 'linked_list'
Raphael = (function(){/* use linked list */})();
但是,Javascript 不允许我以任何不会污染链表对象的全局范围的方式来执行此操作!因此,我必须内联linked_list
到 Raphael 的本地范围:
Raphael = (function(){
/* implement linked list */
var linked_list = function(){/*implementation*/};
})();
现在我想测试linked_list
实现。