2015-07-22 4 views
0

Я тестирует контроллер, содержащего

$document.on('click', $scope.$apply.bind($scope, $scope.deactivate)); 

Когда я проверить этот контроллер, используя Jasmine & Карму

'use strict'; 

describe('controllers: ArrayCtrl', function() { 
    var scope; 

    beforeEach(module('ironridge')); 

    beforeEach(inject(function($controller,$rootScope) { 
     scope = $rootScope.$new(); 
      $controller('ArrayCtrl', { 
       $scope: scope 
      }); 
     })); 

    it('test section ', inject(function($controller) { 
     expect(scope.pannels.length).toBe(0); 
    })); 

}); 

Я получаю следующее сообщение об ошибке:

PhantomJS 1.9.8 (Linux 0.0.0) controllers: ArrayCtrl should be located in Quote Section FAILED TypeError: 'undefined' is not a function (evaluating '$scope.$apply.bind($scope, $scope.deactivate)') undefined at /home/hpro/ironridge/src/app/components/array/array.controller.js:183 at invoke (/home/hpro/ironridge/bower_components/angular/angular.js:4219) at instantiate (/home/hpro/ironridge/bower_components/angular/angular.js:4227) at /home/hpro/ironridge/bower_components/angular/angular.js:8533 at /home/hpro/ironridge/bower_components/angular-mocks/angular-mocks.js:1878 at /home/hpro/ironridge/src/app/components/array/array.controller.spec.js:11 at invoke (/home/hpro/ironridge/bower_components/angular/angular.js:4219) at workFn (/home/hpro/ironridge/bower_components/angular-mocks/angular-mocks.js:2437) TypeError: 'undefined' is not an object (evaluating 'scope.pannels.length') undefined at /home/hpro/ironridge/src/app/components/array/array.controller.spec.js:17 at invoke (/home/hpro/ironridge/bower_components/angular/angular.js:4219) at workFn (/home/hpro/ironridge/bower_components/angular-mocks/angular-mocks.js:2437)

help please

+0

Можете ли вы вставить свой код контроллера? –

+0

@MathewBerg это код контроллер http://pastebin.com/Lz8AnREE – Hamdi

ответ

0
$document.on('click', $scope.$apply.bind($scope, $scope.deactivate)); 

Я не думаю, что приведенный выше код работает. Наверное, вы пытаетесь применить область действия. Вы можете сделать

$(document).on('click', function(){ 
     if(!$scope.$$phase){ 
      $scope.$apply(); 
     } 
     $scope.deactivate(); 
    }); 

Далее в тестовом примере, функция привязки в AngularJs используется как

angular.bind(self, fn, args) 

по documentation. В JQuery привязка используется для привязки обработчика к событию для элементов. В любом случае $ scope. $ Apply.bind не будет работать. Именно по этой причине ваш тестовый пример вызывает ошибку.

+0

Спасибо за ответ я проверил $ (документ) .он («нажмите», функция() { если (! $ Область видимости . $$ phase) { $ scope. $ apply(); } $ scope.deactivate(); }); , но действие выполняется, только когда я нажимаю двойной щелчок – Hamdi

Смежные вопросы