In der zurückkommt, wie ich Unit-Test zu tun, dass postAttributes Funktion ruft sampleService .updateMethod. Ich habe Probleme, seit die updateMethod Versprechen gibt. HierWie Unit-Test-Funktion in einer Steuerung (Jasmin verwenden), die eine Fabrik Service-Anrufe, die unter <strong><em>SampleController</em></strong> einem 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
});
};
}
ist die Fabrik-Service, was 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
});
}
};
}
Ich möchte den Werkskundendienst in den Controller-Spezifikation verspotten, anstatt den eigentlichen Dienst direkt in $ Controller Injektion, da die meisten Einheit Prüfrichtlinien spezifizieren, um eine Einheit unter Isolation zu testen.
Beispiel Controller-Spezifikation:
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??
});
});
Versuchte den oben genannten Ansatz, aber später fand heraus, dass ** sampleService ** an sich viele Abhängigkeiten hat. Also, wenn ich obigen Ansatz folgen muss, muss ich auch alle Abhängigkeiten des sampleService injizieren, was der Fall sein sollte, da wir nur Controller testen, sollten wir alle Abhängigkeiten spotten. Momentan versuche ich den Service mit $ prove.factory zu verspotten. Wie kann ich Versprechen vom verspotteten Dienst mit Erfolgs- und Fehlerblöcken zurückgeben ?! – Pramodh
Ich bin mir nicht sicher, warum Sie die Abhängigkeiten für den Dienst auch injizieren müssen. Ich musste das nie tun und einige meiner Dienstleistungen haben auch mehrere Abhängigkeiten. In jedem Fall können Sie deferred.resolve() verwenden, um Ihren Erfolgsblock und deferred.reject() zu treffen, um Ihren Fehlerblock zu treffen. – tehbeardedone