2016-06-15 7 views
0

私はfirebaseデータベースを呼び出してspyOnを探しています。 Firebaseの呼び出しをラップするFireFuncファイルがあります。しかし、私がspyOn checkメソッドに行くと、それは通常の結果を返します。何が起きてる?ジャスミンを使ってfirebaseを呼び出す

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

これは、問題はあなたがテスト中のあなたのオブジェクトにfirebaseオブジェクトの嘲笑のバージョンを供給していないことである私のコード(JS /サービス-FB-functions.js)

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

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

答えて

1

です。 js/services-fb-functions.jsに存在するfirebaseオブジェクトは、純粋に内部的なものであり、テストのためにどのようにも公開されていません。一般的には、テスト中にモックアウトしたい内部オブジェクトを提供するのに、dependency injectionを使用することをお勧めします。 JSFiddleとJasmine 1.3で作業するためにコードを少し修正しましたので、私の限られたJSスキル(内部オブジェクトを公開する方法は間違いありません)をお試しください。しかし、このJSFiddleは私のポイントを示すべきです:Simple Jasmine example using spies

+0

Ah、右!私は今日後で小切手を持っていきます。ありがとう! – ebbflowgo

関連する問題