使用Jasmine测试Lodash sortBy函数参数

时间:2018-02-27 20:10:59

标签: javascript unit-testing lodash istanbul jasmine2.0

我的项目中有一个控制器,如下所示:

define(function (require) {
  'use strict';

  function AllOrgsController($rootScope, $uibModalInstance) {
    var vm = this;
    var clonedOrgs = _.cloneDeep($rootScope.userData.org);
    vm.modelContainer = _.sortBy(clonedOrgs, function (org) {
      return org.organizationName.toLowerCase();
    });

    vm.openFacilityModal = function () {
      $uibModalInstance.close();
    };

    vm.saveOrgsModal = function () {
      $uibModalInstance.close({ $value: vm.currentFacility });
    };

    vm.cancelOrgsModal = function () {
      $uibModalInstance.dismiss();
    };
  }

  AllOrgsController.$inject = ['$rootScope', '$uibModalInstance'];

  return AllOrgsController;
});

但根据伊斯坦布尔的说法,Lodash的_.sortBy方法中使用的匿名函数不在涵盖范围内。由于我是单位测试的菜鸟,我还没弄清楚为什么 - 有人知道吗?

"function not covered" error message on my code

1 个答案:

答案 0 :(得分:1)

_.sortBy应该为您提供的clonedOrgs参数的每个元素调用您传递的函数。由于伊斯坦布尔检测到传入函数从未运行过,这必然意味着clonedOrgs在测试中始终为空(或者不是有效数组)。因此,您可以通过编写一个$rootScope.userData.org数组包含元素的测试来确保该方法。