mock angularjs-service für unit Tests mit jasmine
Habe ich eine Eckige App und ich will erstellen von unit-Testfällen für die es mit Jasmin.
In meinem AngularJS app, ich habe einen service, wie :
var canceler;
var myServices = angular.module('myServices', ['ngResource'])
myServices.factory('getData', ['$http', '$q', function($http, $q){
var canceler;
return {
setData: function(url, callback, error) {
canceler = $q.defer();
$http.post(url, {}, {timeout:canceler.promise}).success(callback).error(error);
},
abort: function(){ canceler.resolve();}
}
}]);
Dieser service wird von den controller.
Nun, wie kann ich ein Modell für diesen "getData" service, um den Injektor bin ich mit in controllerSpecs.js (für die unit Tests mit jasmine).
Für den Verweis, den code von controllerSpecs.js definiert ist, in Erste Fehler bei der Verwendung von Jasmin mit AngularJS.
InformationsquelleAutor r.bhardwaj | 2014-01-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Probieren Sie etwas wie dieses
und Einsatz von mock-service
Sie emulieren kann die Arbeit von echten GetData in der setData-Funktion, Daten - Eigenschaft ist nicht erforderlich, Sie können einfach speichern Sie es einige Daten, die während des Tests. Ich habe aktualisiert die Antwort, aber ich weiß nicht, die Logik Ihren Dienst, so können Sie keine Logik gibt.
habe die Stelle aber noch eine Sache zu Fragen - wenn statt der Attrappe habe ich das "getData" - service mit $Injektor.get( 'getData' ), was der Schaden ist ?
kein Schaden. Aber unit-Tests bedeutet, dass Sie testen, jeden block unabhängig von den anderen. Also, wenn Ihr test fehl, und Sie verwenden mock-service, können Sie sicher sein, dass problem ist nicht in den service. Ansonsten brauchen Sie mehr Zeit, um die Ursache des Fehlers.
InformationsquelleAutor IgorCh
Können Sie AngularJS ist
$provide
service. Auf dieser Seite veranschaulicht mock die Funktionalität eines Dienstes mit Jasmine spies. Im Grunde in Ihrem Jasmin-test können Sie zählen:Dieser sagt, AngularJS, anstatt die wirklichen
getData
service, der mock wird an seiner Stelle verwendet werden. In diesem Beispiel, über eine Jasmin-Spion für das mock können Sie ganz einfach erstellen Sie Erwartungen darüber, wie und Wann die getData-service aufgerufen wird, durch den controller. Sie können alternativ festlegengetDataMock
jedem anderen Objekt, wenn es Sinn macht, zu unterstützen, die gleiche API wie die echtegetData
service.Für bonus-Punkte, können Sie die
getDataMock
Objekt in eine separate Datei, so dass der mock können Sie sich leicht in eine beliebige Anzahl von unit-tests, wo die Sache geprüft wird verwendetgetData
. Dies erfordert jedoch einige Konfiguration mit dem, was Jasmin Läufer, die Sie verwenden.Ist dies alles, vorausgesetzt, Sie möchten unit-test der controller. Wenn Sie möchten, dass unit-Tests die
getData
Dienst selbst, AngularJS bietet eine schöne mocking-Dienstprogramm speziell für http-Anfragen.Ich benutzte die getDataMock, wie Sie geschrieben haben und bekommen folgenden Fehler TypeError: Cannot read property 'running' von undefined bei isSpecRunning in angular-mock.js
können Sie Ihre gesamte Beispiel in einem JSFiddle?
Ich bin wirklich brauchen, um zu verstehen, wie zu erreichen, Ihre "bonus-Punkt". Wie kann ich festlegen, ein mock-Dienst in '$bieten"?
links in einer Antwort sind tot
InformationsquelleAutor jelinson