Я только что начал использовать 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
- общественных/JS/angular.js общественных/JS/угловой animate.min.js
- общественных/JS/угловой mocks.js
- общественного/JS /ui-bootstrap-tpls-0.14.2.min.js
Приложение работает нормально и тест выполняется, если я удаляю $ scope. $ на разделе с моего контроллера. Я должен делать что-то неправильно в SpecRunner или что-то работает по-разному, когда я вводил контроллер. Кто-нибудь может мне с этим помочь?
EDIT
Тест закончился выглядеть так:
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);
}));
});