wake-up-neo.com

Erwarte einen Spion, bekam aber Funktion

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
});
22

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.

38
antonjs

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();
3
Tabish

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.

0
bnolan