Вычислить angular.элемент в тестах Жасмина - программирование
Подтвердить что ты не робот

Вычислить angular.элемент в тестах Жасмина

У меня есть функция в контроллере, который имеет вызов

var someVar = angular.element(event.target).scope().field;

Я пытаюсь издеваться над этим, делая

var ngElementFake = function(el) {
                return {
                    scope: function() {
                        return {
                            toggleChildElement: true,
                            field: scope.field
                        }
                    }
                }
            }

spyOn(angular, 'element').andCallFake(ngElementFake);

Однако, когда я вызываю функцию в тесте, я получаю ответ:

TypeError: 'undefined' is not a function (evaluating 'injector.get('$rootElement').off()')
at ../angular-mocks/angular-mocks.js:1819

Что я делаю неправильно?

РЕДАКТИРОВАТЬ: Инъекция

    beforeEach(function() {
        inject(function($rootScope, $controller) {

            scope = $rootScope;

            scope.record = recordData;

            scope.model = 'Hierarchy';

            ctrl = $controller("fngHierarchyChildCtrl", {
                $scope: scope
            });
        });
    });
4b9b3361

Ответ 1

Я смог исправить это, вручную очистив шпион после обратного вызова.

var spy;

beforeEach(function() {
    spy = spyOn(angular, 'element').andCallFake(ngElementFake);
});

afterEach(function() {
    spy.andCallThrough();
});

Ответ 2

Из AngularJS FAQ:

Из-за изменения использования в()/off() вместо bind()/unbind(), Angular 1.2 работает только с jQuery 1.7.1 или выше.

Итак, попробуйте перейти на jquery 1.7.1 или выше или вообще не использовать jquery, а Angular будет использовать свой собственный jQLite.

Ответ 3

При переключении с angular 1.0.8 на 1.2.0 я испытывал следующие ошибки при выполнении моих тестов:

TypeError: 'undefined' is not a function (evaluating 'injector.get('$rootElement').off()')

TypeError: 'undefined' is not a function (evaluating '$rootElement.on')

Решением было отредактировать раздел файлов конфигурации кармы и переместить jQuery ниже angular:

 files: [
  //was here
  'http://code.angularjs.org/1.2.0/angular.js',
  'http://code.angularjs.org/1.2.0/angular-mocks.js',
  'http://code.angularjs.org/1.2.0/angular-resource.js',
  'http://code.angularjs.org/1.2.0/angular-route.js',
  'http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js', //moved to here
  ...
 ]