Ich möchte eine Funktion testen, die eine externe API-Methode zweimal mit verschiedenen Parametern aufruft. Ich möchte diese externe API mit einem Jasmine-Spion verspotten und basierend auf den Parametern verschiedene Dinge zurückgeben. Gibt es eine Möglichkeit, dies in Jasmine zu tun? Das Beste, was ich mir einfallen lassen kann, ist ein Hack mit andCallFake:
var functionToTest = function() {
var userName = externalApi.get('abc');
var userId = externalApi.get('123');
};
describe('my fn', function() {
it('gets user name and ID', function() {
spyOn(externalApi, 'get').andCallFake(function(myParam) {
if (myParam == 'abc') {
return 'Jane';
} else if (myParam == '123') {
return 98765;
}
});
});
});
and.callFake
- jasmine.github.io/2.2/… >spyOn(fake, 'method').withArgs('abc').and.returnValue('Jane')
undspyOn(fake, 'method').withArgs('123').and.returnValue(98765)
..withArgs
arbeitet nicht für mich in Jasmin 2.0.withArgs
ist nicht wirklich verfügbar - ich meinte, dass eine solche Methode beim Schreiben von Tests Sinn machen würde.Sie können auch
$provide
einen Spion erstellen. Und verspotten mitand.returnValues
anstattand.returnValue
parametrisierte Daten zu übergeben.quelle
returnValues
zur Unterstützung mehrerer Anrufe verwendet werden sollteexternalApi.get.and.returnValues('abc','123')
innerhalb derit
Funktion aufgerufen wird . Andernfalls funktioniert es niemals, wenn Sie eine Liste mit Werten festlegen, andernfalls wo, da die Reihenfolge, in der die Tests ausgeführt werden, nicht vorhersehbar ist. Tatsächlich sollten Tests nicht von der Reihenfolge abhängen, in der sie ausgeführt werden.In meinem Fall hatte ich eine Komponente, die ich getestet habe, und in ihrem Konstruktor gibt es einen Konfigurationsdienst mit einer Methode namens getAppConfigValue , die zweimal aufgerufen wird, jedes Mal mit unterschiedlichen Argumenten:
In meiner Spezifikation habe ich den ConfigService im TestBed wie folgt bereitgestellt:
Solange die Signatur für getAppConfigValue mit der im tatsächlichen ConfigService angegebenen übereinstimmt, kann die interne Funktion der Funktion geändert werden.
quelle