我刚开始使用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);
}));
});
这些是我的进口商品:
应用程序运行正常,如果我从控制器中删除$ 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);
}));
});
答案 0 :(得分:0)
您正在创建一个对象并将其作为控制器的范围注入。该对象上没有$on
方法。
而是注入$rootScope
并使用方法$new
创建范围:
var scope = $rootScope.$new(),
ctrl = $controller('asstCtrl', { $scope: scope });