【发布时间】:2016-04-11 19:52:22
【问题描述】:
我刚刚开始使用 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);
}));
});
这些是我的导入:
- public/js/jasmine-2.4.0/jasmine.js
- public/js/jasmine-2.4.0/jasmine-html.js
- public/js/jasmine-2.4.0/boot.js
- public/js/jquery.min.js
- public/js/angular.js public/js/angular-animate.min.js
- public/js/angular-mocks.js
- public/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);
}));
});
【问题讨论】: