Javascript 单元测试期间控制器中未定义的$scope.$
我的控制器工作得很好。但是当我想在karma中测试它时,$scope.on方法被认为是未定义的 这是我的控制器:Javascript 单元测试期间控制器中未定义的$scope.$,javascript,angularjs,unit-testing,Javascript,Angularjs,Unit Testing,我的控制器工作得很好。但是当我想在karma中测试它时,$scope.on方法被认为是未定义的 这是我的控制器: angular.module('myApp').controller('DataController', [ '$scope', 'DataProvider' function($scope, DataProvider) { $scope.customData = []; $scope.$on('$stateChangeSuccess', function() {
angular.module('myApp').controller('DataController', [
'$scope', 'DataProvider' function($scope, DataProvider) {
$scope.customData = [];
$scope.$on('$stateChangeSuccess', function() {
DataProvider.getData().then(function(response) {
$scope.customData = response.data.customData;
});
});
}
]);
这是我的测试:
'use strict';
describe('DataController', function(){
beforeEach(function() {
module('myApp', [])
});
it('exists', inject(function($controller) {
var myCtrl = $controller('DataController', { $scope: {} });
expect(myCtrl).toBeDefined();
}));
});
您的
$scope
并不是真正的角度scope
对象,它只是一个空对象。在这种情况下,您需要创建$rootScope
的新子作用域,以便在注入的$scope
中使用$on
方法
尝试:-
我的试卷写错了 我需要实例化一个作用域并将其注入。另外一个关键点是使scope和myCtrl变量可用于所有测试
describe('DataController', function(){
var scope, myCtrl;
beforeEach(function(){
module('myApp');
})
beforeEach(inject(function($rootScope, $controller) {
scope = $rootScope.$new();
myCtrl = $controller('DataController', { $scope: scope });
scope.$digest();
}));
it('exists', function() {
expect(myCtrl).toBeDefined();
});
});
现在我只需要弄清楚如何在单元测试中触发$stateChangeSuccessuccess事件。您想执行
$scope:$rootScope.$new()
而不是$scope:{}
describe('DataController', function(){
var scope, myCtrl;
beforeEach(function(){
module('myApp');
})
beforeEach(inject(function($rootScope, $controller) {
scope = $rootScope.$new();
myCtrl = $controller('DataController', { $scope: scope });
scope.$digest();
}));
it('exists', function() {
expect(myCtrl).toBeDefined();
});
});