Im Februar 2017 sie eine PR Hinzufügen dieser Funktion zusammen veröffentlichten sie es im April 2017.
so auf Getter auszuspionieren/Setter Sie verwenden: const spy = spyOnProperty(myObj, 'myGetterName', 'get');
wo myObj Instanz ist, ‚myGetterName‘ ist der Name des in Ihrer Klasse als get myGetterName() {}
definierten Parameters und der dritte Parameter ist der Typ get
oder set
.
Sie können dieselben Assertionen verwenden, die Sie bereits mit den mit spyOn
erstellten Spionen verwenden.
So können Sie zum Beispiel:
const spy = spyOnProperty(myObj, 'myGetterName', 'get'); // to stub and return nothing. Just spy and stub.
const spy = spyOnProperty(myObj, 'myGetterName', 'get').and.returnValue(1); // to stub and return 1 or any value as needed.
const spy = spyOnProperty(myObj, 'myGetterName', 'get').and.callThrough(); // Call the real thing.
Hier ist die Linie in der Github Quellcode, in dem diese Methode zur Verfügung, wenn Sie interessiert sind.
https://github.com/jasmine/jasmine/blob/7f8f2b5e7a7af70d7f6b629331eb6fe0a7cb9279/src/core/requireInterface.js#L199
Beantwortung der ursprünglichen Frage, mit Jasmin 2.6.1, würden Sie:
var o = { get foo() {} };
spyOnProperty(o, 'foo', 'get').and.returnValue('bar');
Aus der Diskussion über [diese ähnliche Frage] (http://stackoverflow.com/questions/31338197) können Sie nicht. Getter und Setter werden nicht als Standardmethoden behandelt (sie müssen z. B. nicht als Funktionen aufgerufen werden). – Mathletics
Vielleicht könnten Sie einfach ein Ergebnis des abgerufenen Werts in Abhängigkeit von verschiedenen Objektzuständen testen. –
Basierend auf den Kommentaren, ist es anscheinend nicht implementiert, aber es ist theoretisch nicht unmöglich. Der Grund 'spyOn (Object.getOwnPropertyDescriptor (o,' foo '),' get ') 'funktioniert nicht, weil' spyOn' die Eigenschaft des Objekts als eine neue Funktion schreibt, die die existierende Funktion umschließt. Das Ändern des Eigenschaftsdeskriptorobjekts, das von 'getOwnPropertyDescriptor' zurückgegeben wird, ändert nichts an der tatsächlichen Eigenschaft. Sie könnten jedoch Jasmine ändern, um Setter/Getter zu erkennen und die Eigenschaft mit 'defineProperty' neu schreiben. Vielleicht eine Feature-Anfrage öffnen, wenn es dir wichtig ist? – apsillers