Я только начал использовать Jasmine для тестирования приложения AngularJS. Кажется, я делаю весь импорт в SpecRunner, но получаю сообщение об ошибке:
TypeError: $scope.$on is not a function
Я использую это в своем контроллере следующим образом:
app.controller('asstCtrl', function($scope, $uibModal, $interval, $document) {
$scope.$on('$includeContentLoaded', function() {
$scope.doStuff();
});
});
...
Мой тест SpecRunner выглядит так:
describe('calculator', function(){
beforeEach(module('asst'));
it('basic', inject(function($controller) {
var scope = {},
ctrl = $controller('asstCtrl', {$scope:scope});
expect(scope.x).toBe(1);
}));
});
Это мой импорт:
- общественность/JS/жасмин-2.4.0/jasmine.js
- общедоступный/js/жасмин-2.4.0/жасмин-html.js
- общественность/js/жасмин-2.4.0/boot.js
- общественность/js/jquery.min.js
- public/js/angular.js public/js/angular-animate.min.js
- общедоступный/js/angular-mocks.js
- общедоступный/js/ui-bootstrap-tpls-0.14.2.min.js
Приложение работает нормально, и тест запускается, если я удалю раздел $scope.$on из моего контроллера. Должно быть, я делаю что-то не так в SpecRunner или что-то работает по-другому, когда я ввожу контроллер. Кто-нибудь может мне с этим помочь?
ИЗМЕНИТЬ
В итоге тест выглядел так:
describe('calculator', function(){
beforeEach(module('asst'));
var rootScope;
beforeEach(inject(function($rootScope) {
rootScope = $rootScope;
}));
it('basic', inject(function($controller) {
var scope = rootScope.$new(),
ctrl = $controller('asstCtrl', {$scope:scope});
expect(scope.x).toBe(1);
}));
});