Я тестирую контроллер, содержащий
$document.on('click', $scope.$apply.bind($scope, $scope.deactivate));
Когда я тестирую этот контроллер с помощью Jasmine & Karma
'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): ArrayCtrl должен располагаться в разделе запроса FAILED TypeError: "undefined" не является функцией (оценивая "$ scope". $ Apply.bind($ scope, $ scope.deactivate) ') undefined в /home/hpro/ironridge/src/app/components/array/array.controller.js:183 при вызове (/home/hpro/ironridge/bower_components/angular/angular.js:4219) в экземпляре (home/hpro/ironridge/bower_components/angular/angular.js: 4227) в /home/hpro/ironridge/bower_components/angular/angular.js:8533 в /home/hpro/ironridge/bower_components/angular-mocks/angular-mocks.js: 1878 at/home/hpro/ironridge/src/app/components/array/array.controller.spec.js:11 при вызове (/home/hpro/ironridge/bower_components/angular/angular.js:4219) на workFn (/home/hpro/ironridge/bower_components/angular-mocks/angular-mocks.js:2437) TypeError: 'undefined' не является объектом (оценка 'scope.pannels.length') undefined at/home/hpro/ironridge/src/app/components/array/array.controller.spec.js:17 при вызове (/home/hpro/iro nridge/bower_components/angular/angular.js: 4219) на работеFn (/home/hpro/ironridge/bower_components/angular-mocks/angular-mocks.js:2437)
Помоги пожалуйста
$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)
согласно документации. В JQuery привязка используется для привязки обработчика к событию для элементов. В любом случае $ scope. $ Apply.bind не будет работать. Именно по этой причине ваш тестовый пример вызывает ошибку.