Ich versuche einen Test (1) für dieses Modul (2) zu implementieren.
Mein Ziel ist es zu überprüfen, ob die Sammlung abgerufen wird, wenn ein bestimmtes Ereignis ausgelöst wird.
Wie Sie meinem Kommentar in (2) entnehmen können, erhalte ich die Nachricht Error: Expected a spy, but got Function.
Das Modul funktioniert, aber der Test schlägt fehl. irgendwelche Ideen?
(1)
// jasmine test module
describe('When onGivePoints is fired', function () {
beforeEach(function () {
spyOn(this.view.collection, 'restartPolling').andCallThrough();
app.vent.trigger('onGivePoints');
});
it('the board collection should be fetched', function () {
expect(this.view.collection.restartPolling).toHaveBeenCalled();
// Error: Expected a spy, but got Function.
});
});
(2)
// model view module
return Marionette.CompositeView.extend({
initialize: function () {
this.collection = new UserBoardCollection();
this.collection.startPolling();
app.vent.on('onGivePoints', this.collection.restartPolling);
},
// other code
});
Sie müssen in die eigentliche Methode einsteigen, die sich in diesem Fall auf dem Prototyp befindet.
describe('When onGivePoints is fired', function () {
beforeEach(function () {
spyOn(UsersBoardCollection.prototype, 'restartPolling').andCallThrough();
app.vent.trigger('onGivePoints');
});
it('the board collection should be fetched', function () {
expect(UsersBoardCollection.prototype.restartPolling).toHaveBeenCalled();
});
});
Das Ausspähen des Prototyps ist ein schöner Trick, den Sie verwenden können, wenn Sie nicht zu der Instanz gelangen, die Sie ausspionieren möchten.
Ich habe auch das gleiche Problem bekommen, aber ich habe es gelöst, indem ich im Funktionsaufruf ein Argument übergeben habe. Dann müssen Sie Ihren Testfall wie folgt in die it
schreiben.
var data = {name:"test"}
spyOn(UsersBoardCollection.prototype, "restartPolling").and.callThrough();
UsersBoardCollection.prototype.restartPolling(data);
expect(UsersBoardCollection.prototype.restartPolling).toHaveBeenCalled();
Ich hatte diesen Fehler, weil ich zwei Versionen von Sinon geladen hatte oder möglicherweise Sinon-Jasmin nicht richtig initialisierte. Als ich Sinon und dann Sinon Jasmin explizit in mein Spec-Setup geladen habe, lief es korrekt.