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 应该证明我的观点: Simple Jasmine example using spies

于 2016-06-15T04:22:20.910 回答