AngularJS v1.2.26
Jasmine v2.2.0
Wie kann ich das Verhalten von a ändern oder entfernen spyOn
? Wenn ich versuche, es zu überschreiben, wird folgende Fehlermeldung angezeigt:Error: getUpdate has already been spied upon
var data1 = 'foo';
var data2 = 'bar';
describe("a spec with a spy", function(){
beforeEach(module('app'));
var $q;
beforeEach(inject(function(_updateService_, _$q_){
updateService = _updateService_;
//spy the results of the getUpdate()
$q = _$q_;
var deferred = $q.defer();
deferred.resolve( data1 );
spyOn(updateService, 'getUpdate').and.returnValue(deferred.promise);
}));
describe('and here the spy should be different', function() {
it('returns a different value', function() {
var deferred = $q.defer();
deferred.resolve( data2 );
spyOn(updateService, 'getUpdate'); //ERROR HERE
updateService.getUpdate.and.returnValue(deferred.promise);
...
});
});
...
Wenn ich den zweiten SpyOn entferne, funktioniert der Test nicht.
Wie mache ich das?
javascript
angularjs
unit-testing
jasmine
karma-jasmine
emersonthis
quelle
quelle
Antworten:
Sie können es einfach überschreiben
quelle
Sie können den Rückgabewert des Spions überschreiben
var deferred = $q.defer(); deferred.resolve( data1 ); var getUpdateSpy = spyOn(updateService, 'getUpdate').and.returnValue(deferred.promise); var newDeferred = $q.defer(); newDeferred.resolve( data2 ); getUpdateSpy.and.returnValue(newDeferred.promise);
quelle
getUpdateSpy
im übergeordnetendescribe
Block definieren.Verwenden Sie seit Jasmin v2.5 die globale
allowRespy()
Einstellung.jasmine.getEnv().allowRespy(true);
Sie können
spyOn()
mehrmals anrufen , wenn Sie nicht möchten und / oder Zugriff auf den ersten Spion haben. Beachten Sie, dass der vorherige Spion zurückgegeben wird, falls einer bereits aktiv ist.spyOn(updateService, 'getUpdate').and.returnValue(deferred.promise); ... spyOn(updateService, 'getUpdate').and.returnValue(deferred.promise);
quelle
Einfacher geht es zu einfach
updateService.getUpdate.and.returnValue(Observable.of({status:true}));
quelle
Andere Option:
(yourService.method as jasmine.Spy).and.returnValue(value);
quelle
Die Antwort mit dem grünen Häkchen hat bei mir nicht funktioniert, aber das hat funktioniert:
yourCoolService.createThing = jasmine.createSpy('notreal', function(){}).and.returnValue();
Ihr Jasmin-Test wird ausgeführt, aber wenn Sie das App-Typoskript starten, werden Sie laut angeschrien, wenn Sie keine zufällige Zeichenfolge und keine leere Funktion als Argumente verwenden
createSpy()
.quelle