【问题标题】:Unit testing Javascript anonymous functions单元测试 Javascript 匿名函数
【发布时间】:2015-11-16 21:13:12
【问题描述】:

我的应用程序的 $scope 函数中有一些匿名函数。这些是匿名的,因为我只需要它们在页面加载时运行一次(它们会这样做)。在这些匿名函数中,我将 $scope.itemSuccess 变量设置为 true 并返回;当满足某些规格时(不重要)。这些匿名函数还会增加一个$scope.counter;

我不确定如何在 jasmine 单元测试中定位这些匿名函数。我需要确保他们正确执行逻辑并且适当地增加计数器。

【问题讨论】:

  • 永远不要对不面向外部的东西进行单元测试。您要测试的内容听起来像是测试私有状态。不要测试它。
  • 只是命名函数,并不是在任何情况下你都不能这样做......

标签: javascript unit-testing anonymous-function karma-jasmine


【解决方案1】:

首先,您需要以某种方式访问​​测试中的匿名函数,因此您必须将它们分配给变量或命名它们。

完成此操作后,要对其进行测试,您有两种选择:将测试放入闭包(您的主函数)本身,或者将代码添加到引用您希望测试的函数的闭包中。

不幸的是,由于显而易见的原因,第一个选项并不是很好,而第二个选项会使您的 API 膨胀。但是,正如 Philip Walton 在 his blog post 中出色解释的那样,您可以通过在 API 中显式调用您的测试,然后在构建过程中删除它们来使用选项二。

Philip 在他的帖子中详细介绍了更多细节,我建议您阅读它,但这里有一个快速快照可以帮助您入门:

   function closure(){

        // public variables here
        var publicVariable1 = 1;
        var publicVariable2 = 2;

        return {
            publicVariable1 : publicVariable1,
            publicVariable2 : publicVariable2,
            __tests__: {
                add: add,
                subtract: subtract
                }
        };

        // private methods you do not wish to expose (but must for unit testing purposes).      
        function add(a,b){
            return a + b;
        };

        function subtract(a,b){
            return a - b;
        }
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 2011-10-28
    • 1970-01-01
    相关资源
    最近更新 更多