0

firebase データベースへの spyOn 呼び出しを探しています。firebase 呼び出しをラップする FireFunc ファイルがあります。ただし、チェックメソッドをspyOnに移動すると、通常の結果が返されます。何が起きてる?

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

これは私のコードです (js/services-fb-functions.js)

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

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

1 に答える 1

1

firebase問題は、オブジェクトのモック バージョンをテスト対象のオブジェクトに提供していないことです。js/services-fb-functions.js に存在するfirebaseオブジェクトは純粋に内部的なものであり、テストのために公開されることはありません。一般に、テスト中にモックアウトしたい内部オブジェクトを提供するために依存性注入を使用することをお勧めします。私はあなたのコードを JSFiddle と Jasmine 1.3 で動作するように少し調整しました。そのため、私の JS スキルが限られていることをお許しください (内部オブジェクトを公開するより洗練された方法は間違いなくあります)。しかし、この JSFiddle は私のポイントを示すはずです :

于 2016-06-15T04:22:20.910 に答える