$ scope. $ применить неопределенное модульное тестирование angularJS жасмин

0

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

$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)

Помоги пожалуйста

  • 0
    Можете ли вы вставить свой код контроллера?
  • 0
    @MathewBerg это код контроллера pastebin.com/Lz8AnREE
Теги:
karma-jasmine
angularjs-scope

1 ответ

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)

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

  • 0
    Спасибо за ответ, который я протестировал $ (document) .on ('click', function () {if (! $ Scope. $$ phase) {$ scope. $ Apply ();} $ scope.deactivate (); }); но действие выполняется только при двойном щелчке

Ещё вопросы

Сообщество Overcoder
Наверх
Меню