Angularjs 如何在控制器内测试$scope.method?

Angularjs 如何在控制器内测试$scope.method?,angularjs,unit-testing,jasmine,karma-runner,Angularjs,Unit Testing,Jasmine,Karma Runner,我试过使用Spies,试着通过调用函数声明变量,但什么都不起作用。我是单元测试新手,我一定是误解了什么 我的函数单元测试 describe('search treatments method',function(){ it('search treament should have been called',function(){ testSearch = new scope.searchTreatments(); spyOn(testSearch,'search

我试过使用Spies,试着通过调用函数声明变量,但什么都不起作用。我是单元测试新手,我一定是误解了什么

我的函数单元测试

   describe('search treatments method',function(){
  it('search treament should have been called',function(){
      testSearch = new scope.searchTreatments();
      spyOn(testSearch,'searchTreatments');
      expect(testSearch.searchTreatments).toHaveBeenCalled();
});
});
我想测试的方法

  $scope.searchTreatments = function(value){
    return Treatment.find(value).then(function(values){
      return values;
    });
  };
处理是另一个文件中的工厂

  app.factory('Treatment',['$http','$q',function($http,$q){
function _getTreatment(val) {
  return $http.get('/api/providers_medical_services_services', {
    params: {
      type: 'treatment',
      treatment: val
    }
  }).then(function(response){
    return response.data;
  });
}
return {
  find: _getTreatment
};
}]);

基本上,我只想在testsearch上创建一个spy,看看它是否被调用。

如果我没有错的话,你必须模拟工厂

您可能必须使用angular-mocks.js来模拟服务或工厂,以便在Karma中进行测试

如果您已添加控制器和服务文件,请检查您的karma.config


-谢谢

我添加了所有控制器和服务。你说的模仿是什么意思?我看到这个术语四处游荡,我不理解它是一种类似于在测试用例中创建模拟服务、服务或工厂的东西,可以模拟该服务的主要功能。然后必须将它们注入测试用例控制器访问: