2016-06-15 4 views
0

Ich freue mich auf SpyOn Aufrufe an die Firebase-Datenbank. Ich habe eine FireFunc-Datei, die Firebase-Aufrufe umschließt. Wenn ich jedoch spionOn die Check-Methode gehe, gibt es das reguläre Ergebnis zurück. Was ist denn hier los?Mocking eine Firebase Anrufe mit Jasmine

var FireFunc = require("../js/services-fb-functions.js"); 

describe('Firebase Testing Suite', function() { 
    var firebase; 
    var testPath; 
    var testResult = {}; 

    beforeAll(function() { 
     var firebaseFunctions = ['check'] 
     firebase = jasmine.createSpyObj('firebase', firebaseFunctions) 

     firebase.check.and.callFake(function() { 
      return 2 
     }); 
    }); 

    describe('check', function() { 
    it('is working?', function() { 
     var x = FireFunc.zset() 
     expect(x).toBe(3); // THIS IS RETURNING 1... which means the spyOn doesn't work for me ! 
    }); 
}); 

Dies ist mein Code (js/services-fb-functions.js)

var firebase = {}; 
firebase.check = function() { 
    return 1; 
} 

module.exports = { 
    zset: function() { 
     return firebase.check(); 
    } 
} 

Antwort

1

Das Problem ist, dass Sie nicht die verspottet Version des firebase Objekt in den zu prüfenden Objekt geliefert haben. Das Objekt firebase, wie es in js/services-fb-functions.js existiert, ist rein intern und wird in keiner Weise zum Testen freigegeben. In der Regel empfehlen wir die Verwendung von dependency injection zur Bereitstellung interner Objekte, die Sie während der Tests ausspionieren möchten. Ich habe Ihren Code leicht angepasst, um mit JSFiddle und Jasmine 1.3 zu arbeiten, also bitte entschuldigen Sie meine begrenzten JS Fähigkeiten (es gibt definitiv elegantere Möglichkeiten, das interne Objekt zu belichten), aber dieser JSFiddle sollte meinen Punkt demonstrieren: Simple Jasmine example using spies

+0

Ah, Recht! Ich werde heute später einen Scheck bekommen. Vielen Dank! – ebbflowgo