Ответ 1
Я смог исправить это, вручную очистив шпион после обратного вызова.
var spy;
beforeEach(function() {
spy = spyOn(angular, 'element').andCallFake(ngElementFake);
});
afterEach(function() {
spy.andCallThrough();
});
У меня есть функция в контроллере, который имеет вызов
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
});
});
});
Я смог исправить это, вручную очистив шпион после обратного вызова.
var spy;
beforeEach(function() {
spy = spyOn(angular, 'element').andCallFake(ngElementFake);
});
afterEach(function() {
spy.andCallThrough();
});
Из AngularJS FAQ:
Из-за изменения использования в()/off() вместо bind()/unbind(), Angular 1.2 работает только с jQuery 1.7.1 или выше.
Итак, попробуйте перейти на jquery 1.7.1 или выше или вообще не использовать jquery, а Angular будет использовать свой собственный jQLite.
При переключении с 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
...
]