2016-07-06 17 views
-1

ich eine Methode, wie dieses in meinem serviceundefiniert ist kein Objekt in Angularjs Service

angular.module('App') 
    .factory("AppService", [function() { 

    var _admin; 

    return { 
     get admin() { 
      return _admin; 
     }, 
    }; 
    }]); 

In meinem controller ich es so bin mit:

$scope.show = function(){ 
     return AppService.admin === 0 || (AppService.admin !== 0 && AppService.admin === true); 
}; 

Wenn ich versuche, die function zu testen, ich bin immer unter einer der folgenden Fehler:

it('calls the showAutoPay method', function() { 
    $scope.show(); 
    expect($scope.show).to 
      .have.been.calledOnce; 
    expect(service.admin).to.not.equal(null); 
    assert.equal(service.admin, '0'); 
}); 

I Ich bin auch nicht sicher, wie man die AppService, die die get und set Methoden hat, zu verspotten.

Antwort

0

In Ihrem before Sie den Dienst wie diese injizieren würde

var AppService; 
beforeEach(inject(function(_AppService_) { 
    AppService = _AppService_; 
})); 

und Sie können in Ihrem Test verspotten mit Jasmin wie diese

spyOn(AppService, 'getAdmin').andCallFake(function() { 
    // return whatever you want 
     return 0; 
    }); 


// then the expect would be like 
expect(AppService.getAdmin).toHaveBeenCalled(); 

Mehr über Spione des Jasmin http://jasmine.github.io/2.0/introduction.html#section-Spies

+0

Getadmin ist keine Funktion ... its a Setter/Getter Admin-get() {} – Shane

0

Ich denke, das ist, was Sie suchen:

(function() { 
 
    "use strict"; 
 
    angular.module('app', []) 
 
    .controller('mainCtrl', function(AppService) { 
 
     var vm = this; 
 
     vm.service = AppService; 
 

 
     vm.service._admin = 10; 
 

 
     vm.random = function() { 
 
     vm.service._admin = Math.floor(Math.random() * 5); 
 
     console.log('AppService obj => ', AppService._admin); 
 
     }; 
 
    }) 
 
    .factory('AppService', function() { 
 
     var admin; 
 
     this.appService = { 
 
     get _admin() { 
 
      return admin; 
 
     }, 
 
     set _admin(val) { 
 
      admin = val; 
 
     } 
 
     }; 
 

 
     return this.appService; 
 
    }); 
 
})();
<!DOCTYPE html> 
 
<html ng-app="app"> 
 

 
<head> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.min.js"></script> 
 
</head> 
 

 
<body ng-controller="mainCtrl as main"> 
 
    <button type="button" ng-click="main.random()">Change value</button> 
 
    <span ng-bind="main.service._admin"></span> 
 
</body> 
 

 
</html>

+0

Nein, es ist alles darüber, wie den Service zu testen ... – Shane

+0

Vielleicht ist Ihre Frage völlig falsch verstanden ich. Funktioniert Ihre Fabrik dann gut? Willst du nur wissen, wie man es testet? – developer033

+0

Ja, meine Fabrik funktioniert ... Ich möchte nur wissen, wie man die Fabrik testet ... die in meinen Controller injiziert wird ... – Shane