Javascript 角度测试控制器导致TypeError:Object没有方法“$watch”
我正在测试我的控制器, 当我运行测试时,我得到: TypeError:对象没有方法“$watch” 在我的控制器中,我使用$scope.$watch,如何解决此问题 controllerSpecs.js controller.js: 错误: 您的应用程序模块称为控制器吗?你为你的ng应用分配了什么Javascript 角度测试控制器导致TypeError:Object没有方法“$watch”,javascript,unit-testing,angularjs,karma-runner,karma-jasmine,Javascript,Unit Testing,Angularjs,Karma Runner,Karma Jasmine,我正在测试我的控制器, 当我运行测试时,我得到: TypeError:对象没有方法“$watch” 在我的控制器中,我使用$scope.$watch,如何解决此问题 controllerSpecs.js controller.js: 错误: 您的应用程序模块称为控制器吗?你为你的ng应用分配了什么 您的应用程序模块称为控制器吗?您为ng应用程序分配了什么?您正在将作用域初始化为{}。所以,$scope是{},没有任何角度方法。只需删除beforeach$controller调用中的scope属性
您的应用程序模块称为控制器吗?您为ng应用程序分配了什么?您正在将作用域初始化为{}。所以,$scope是{},没有任何角度方法。只需删除beforeach$controller调用中的scope属性。@Utopik谢谢,现在我得到了不同的错误,TypeError:无法设置控制器$scope.number=3中未定义的属性'number',但现在作用域未定义。您正在将作用域初始化为{}。所以,$scope是{},没有任何角度方法。只需删除beforeach$controller调用中的scope属性即可。@Utopik谢谢,现在我得到了不同的错误,TypeError:无法设置控制器$scope.number=3中未定义的属性'number',但现在范围未定义。如果成功了,但现在我得到了一个错误,因为我正在从我的原始控制器类型调用另一个方法错误:对象没有方法“get\u publisher\u list”我更新了控制器代码,你能帮忙吗?我想你应该为这个问题提出另一个问题,因为这已经解决了原来的问题。让我们试着不要偏离这个答案,我的答案可能会对其他人有所帮助。或者我们可以把这个移到聊天@LiadLivNat我认为您需要单独测试服务。看看这个请看其他线程完善它的工作,但现在我得到了一个错误,因为我调用了另一个方法从我的原始控制器类型错误:对象没有方法'得到出版商名单'我更新了控制器代码,你能帮我吗?我想你应该为这个问题提出另一个问题,因为这已经解决了原来的问题。让我们试着不要偏离这个答案,我的答案可能会对其他人有所帮助。或者我们可以把这个移到聊天@LiadLivNat我认为您需要单独测试服务。看这个,请看另一条线
describe('controllers', function(){
var scope, ctrl,timeout;
beforeEach(module('controllers'));
beforeEach(inject(function($controller) {
scope = {};
timeout = {};
ctrl = $controller('PublishersCtrl', {$scope:scope,APIService:APIService,$timeout:timeout});
}));
it('should have scope variable equals number', function() {
expect(scope.number).toBe(3);
});
});
controller('PublishersCtrl',['$scope','APIService','$timeout', function($scope,APIService,$timeout) {
$scope.number = 3;
/* Make sure second click on order will revert the sorting */
$scope.$watch('orderByField', function() {
$scope.reverseSort = true;
}); // initialize the watch
APIService.get_publisher_list().then(function(data){
$scope.render_table_and_filters(data);
});
}
TypeError: Object #<Object> has no method '$watch'
at new <anonymous> (C:/angular-client/app/js/controllers.js:24:12)
describe('controllers', function(){
var scope, ctrl, timeout;
beforeEach(module('controllers'));
beforeEach(inject(function($rootScope, $controller) {
scope = $rootScope.$new(); // this is what you missed out
timeout = {};
controller = $controller('PublishersCtrl', {
$scope: scope,
APIService: APIService,
$timeout: timeout
});
}));
it('should have scope variable equals number', function() {
expect(scope.number).toBe(3);
});
});