JavaScript可以是“吗?”;“可测试单元”;如果包装在自动执行匿名函数中
正如我多次看到的,一个自动执行的匿名函数用于包含整个库。如果QUnit无法访问匿名函数包装器中的任何内容,那么如何测试这些库呢?您只需对该“公共”函数执行所有测试,例如,请参见官方jQuery核心 片段:JavaScript可以是“吗?”;“可测试单元”;如果包装在自动执行匿名函数中,javascript,unit-testing,qunit,jasmine,Javascript,Unit Testing,Qunit,Jasmine,正如我多次看到的,一个自动执行的匿名函数用于包含整个库。如果QUnit无法访问匿名函数包装器中的任何内容,那么如何测试这些库呢?您只需对该“公共”函数执行所有测试,例如,请参见官方jQuery核心 片段: // Basic constructor's behavior equals( jQuery().length, 0, "jQuery() === jQuery([])" ); equals( jQuery(undefined).length, 0, "jQuery(undefined) =
// Basic constructor's behavior
equals( jQuery().length, 0, "jQuery() === jQuery([])" );
equals( jQuery(undefined).length, 0, "jQuery(undefined) === jQuery([])" );
equals( jQuery(null).length, 0, "jQuery(null) === jQuery([])" );
equals( jQuery("").length, 0, "jQuery('') === jQuery([])" );
equals( jQuery("#").length, 0, "jQuery('#') === jQuery([])" );
您不需要访问私有函数来测试公共行为我同意您不想通过寻找秘密的方法来离散测试私有方法来执行 然而,正如您所指出的,一个接一个的web应用程序被编写成一个巨大的自动执行的泥球,没有任何命名或公共API。这是一个完全不同的问题,在许多其他技术堆栈中不太可能遇到 TDD’ing JavaScript的一个巨大价值在于,它迫使您编写至少可供两方使用的JavaScript:您的web应用程序+您的单元测试 我已经和Jasmine玩过几次这个传统救援游戏:
函数(窗口,文档,未定义){…}(窗口,文档)
其中…
是您的代码。只要将代码连接起来就足够了。