使用业力(而不是功能)在Rootscope上测试功能



我在控制器中具有以下功能:

.controller('ContainerController', ['$scope', '$rootScope', '$state','$window', '$location','employeeFactory', 'employeeTestFactory', function ($scope, $rootScope, $state, $window,$location, employeeFactory, employeeTestFactory) {
        $rootScope.calculateUsed = function(val){
            $rootScope.employee.timePending = $rootScope.employee.timePending = 0;
            var newTimeUsed = 0;
            angular.forEach(val, function(key, value){
                var td = key.timeDuration;
                if(key.timeState === "pending"){
                    $rootScope.employee.timePending += Number(td);
                }else{
                    newTimeUsed += Number(td);
                }
            });
            $rootScope.employee.totalTimeUsed = newTimeUsed;
        }
 }])

在我的业力内,我正在尝试声明并使用该功能:

describe('Controllers', function() {
  var InfoController, ContainerController, state;
  var $controller, $location, $window;
  var scopeIC, scopeCC;
  beforeEach(module('ui.router'));
  beforeEach(angular.mock.module('ptoApp.controller'));
  beforeEach(angular.mock.module('ptoApp.employeeTestFactory'));
  beforeEach(module('ngResource'));

  beforeEach(inject(function($controller, _$rootScope_, _$location_, _$window_, _employeeTestFactory_, _$httpBackend_, _$state_) {
    scopeIC = _$rootScope_.$new();
    scopeCC = _$rootScope_.$new();
    $rootScope = _$rootScope_;
    $httpBackend = _$httpBackend_;
    ContainerController = $controller('InfoController', {
      $scope: scopeCC,
      $location: _$location_,
      $window: _$window_,
      $rootScope: $rootScope,
      employeeTestFactory:_employeeTestFactory_,
      $state:_$state_
    });
  }));
  it('ContainerController should be defined', function() {
    expect(ContainerController).toBeDefined();
  });
  it('ContainerController should test calculateUsed on rootscope', function() {
    $rootScope.employee = {
      "employeeid": "tcoulson@gmail.com",
      "firstName": "Todd",
      "lastName": "Coulson",
      "employeeType": "full-time",
      "totalTimeUsed": 0,
      "totalTimeAccrued": 40
    }
    var singleReq = [{"requestedBy": "Todd",
        "approvedBy": "Tom",
        "status": "approved",
        "startDateTime": "3/25/2017",
        "endDateTime": "3/29/2017",
        "timeDuration": "32",
        "message": "I need a vaca",
        "approverMessage": "Take one!",
        "locked": "false",
        "timeState":"approved",
        "timeType":"multiple days",
        "timeOffGroup":"paid time off"}]
    $rootScope.calculateUsed(singleReq);
    expect($rootScope.employee.totalTimeUsed).toBe(32);
  });
});

谁能告诉我为什么在这里计算不是一个函数吗?我在Rootscope中传递,我可以验证它的定义,但是它无法读取我在$ rowotscope上添加的函数?提前致谢。

您正在调用 containerController 为'infocontroller'。

ContainerController = $controller('InfoController', { ...})

您应该在控制器声明上命名时正确地称其为:

ContainerController = $controller('ContainerController', { ...}) 

我在调用正确的控制器方面有一个错字。一旦我修复并导入了正确的依赖项,就可以使用。

最新更新