Wie unit-Tests (mit Jasmin) eine Funktion in einer Steuerung, die fordert, eine Fabrik-service, die eine Zusage zurückgibt
In der unten SampleController, wie kann ich das Gerät testen, dass postAttributes Funktionsaufrufe sampleService.updateMethod. Ich habe Probleme seit der updateMethod Renditen Versprechen.
angular.module('sampleModule')
.controller('SampleController', SampleController);
SampleController.$inject =['sampleService'];
function SampleController(sampleService){
this.postAttributes = function() {
sampleService.updateMethod(number,attributes)
.then(function(response){
//do something on successful update
},function(response){
//do something on unsuccessful update
});
};
}
Hier ist die Fabrik-service, die ich habe:
angular.module('sampleModule')
.factory('sampleService', sampleService);
sampleService.$inject = ['$http'];
function sampleService($http) {
return {
getMethod: function(acctNumber){
return $http({
method: 'GET',
url: //api endpoint
});
},
updateMethod: function(number, attributes){
return $http({
method: 'PUT',
url: //api endpoint,
data: //payload
});
}
};
}
Möchte ich verspotte die Fabrik-service in den controller-spec als Injektion die tatsächliche service direkt in $controller, da die meisten unit-Test-Richtlinien festlegen, um zu testen, eine Einheit unter isolation.
Probe controller spec:
describe('SampleController Test', function(){
var $controller;
var service;
beforeEach(angular.mock.module('sampleModule'));
beforeEach(angular.mock.inject(function(_$controller_){
$controller = _$controller_;
}));
it('Testing $scope variable', function(){
var sampleController = $controller('SampleController', {
sampleService: service, //mocked factory service
});
sampleController.postAttributes(); //calling the function first
//here I would like to make an assertion to check if
//sampleService.updateMethod has been called with certain parameters
//how do I do that??
});
});
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gegoogelt um und fand eine Lösung, die zu verspotten, die Fabrik-service und folgten Versprechen der Schöpfung Ansatz wie @TehBeardedOne und machte es zurück aus der verspottet service.
Habe ich über den sampleService mit $provider service gemacht und updateMethod zurückzukehren ein Versprechen mit $q. Später können Sie beheben, oder ablehnen, das Versprechen und testen Sie den Erfolg und Misserfolg Blöcke in die einzelnen it-Bausteine.
Benötigen Sie einen spy, um zu überprüfen, dass die Funktion aufgerufen wird. Es gibt mehrere Möglichkeiten zu gehen über das tun dies, wie ich bin sicher, Sie haben wahrscheinlich schon bemerkt. Sie müssen auch zu injizieren
$q
und$rootScope
wie Sie benötigen, um in einer Schleife die digest-Zyklus, um wieder das Versprechen.In der Tat, wenn alles, was Sie tun möchten, ist, dass die Funktion aufgerufen wird, ist eine einfache Spion wird gut funktionieren. Sie haben nicht einmal die Rückkehr der Verheißung. That being said, wenn Sie möchten, weiter durch die
postAttributes()
- Funktion und testen Sie andere Sachen in dieser Funktion, dann werden Sie brauchen, um wieder das Versprechen, das zu tun. Hier ist der Ansatz, die gut funktioniert für mich. So etwas sollte funktionieren.