jasmine.createSpy
kann verwendet werden, wenn keine Funktion zum Ausspionieren vorhanden ist. Es wird Anrufe und Argumente wie eine spyOn
verfolgen, aber es gibt keine Implementierung.
jasmine.createSpyObj
wird verwendet, um einen Mock zu erstellen, der eine oder mehrere Methoden ausspioniert. Es gibt ein Objekt zurück, das für jede Zeichenfolge, die ein Spion ist, eine Eigenschaft besitzt.
Wenn Sie einen Mock erstellen möchten, sollten Sie jasmine.createSpyObj
verwenden. Schauen Sie sich die folgenden Beispiele an.
Von Jasmin Dokumentation http://jasmine.github.io/2.0/introduction.html ...
createSpy:
describe("A spy, when created manually", function() {
var whatAmI;
beforeEach(function() {
whatAmI = jasmine.createSpy('whatAmI');
whatAmI("I", "am", "a", "spy");
});
it("is named, which helps in error reporting", function() {
expect(whatAmI.and.identity()).toEqual('whatAmI');
});
it("tracks that the spy was called", function() {
expect(whatAmI).toHaveBeenCalled();
});
it("tracks its number of calls", function() {
expect(whatAmI.calls.count()).toEqual(1);
});
it("tracks all the arguments of its calls", function() {
expect(whatAmI).toHaveBeenCalledWith("I", "am", "a", "spy");
});
it("allows access to the most recent call", function() {
expect(whatAmI.calls.mostRecent().args[0]).toEqual("I");
});
});
createSpyObj:
describe("Multiple spies, when created manually", function() {
var tape;
beforeEach(function() {
tape = jasmine.createSpyObj('tape', ['play', 'pause', 'stop', 'rewind']);
tape.play();
tape.pause();
tape.rewind(0);
});
it("creates spies for each requested function", function() {
expect(tape.play).toBeDefined();
expect(tape.pause).toBeDefined();
expect(tape.stop).toBeDefined();
expect(tape.rewind).toBeDefined();
});
it("tracks that the spies were called", function() {
expect(tape.play).toHaveBeenCalled();
expect(tape.pause).toHaveBeenCalled();
expect(tape.rewind).toHaveBeenCalled();
expect(tape.stop).not.toHaveBeenCalled();
});
it("tracks all the arguments of its calls", function() {
expect(tape.rewind).toHaveBeenCalledWith(0);
});
});
Sehr gute Antwort, aber was ist, wenn ich die Methode 'play' wollen etwas zurückgeben? Mit createSpyObj kann ich das Verhalten der Methoden nicht verspotten – iberbeu
Sie können tape.play.and.returnValue (1) verwenden; siehe [link] (http://jasmine.github.io/2.0/introduction.html#section-Spies:_
and.returnValue
) für weitere Details. –