【问题标题】:Mocking a firebase calls using Jasmine使用 Jasmine 模拟 Firebase 调用
【发布时间】:2016-06-15 12:22:20
【问题描述】:

我正在寻找对 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();
    }
}

【问题讨论】:

    标签: javascript unit-testing jasmine firebase-realtime-database spyon


    【解决方案1】:

    问题是您没有向您的被测对象提供 firebase 对象的模拟版本。存在于 js/services-fb-functions.js 中的 firebase 对象纯粹是内部的,不会以任何方式公开用于测试。好的做法通常是使用dependency injection 提供您希望在测试期间模拟出来的内部对象。我已经稍微修改了您的代码以使用 JSFiddle 和 Jasmine 1.3,所以请原谅我有限的 JS 技能(肯定有更优雅的方式来公开内部对象),但是这个 JSFiddle 应该证明我的观点:Simple Jasmine example using spies

    【讨论】:

    • 尽管 Firebase 在 TDD 策略中仍然不起作用,这仍然令人失望。
    • 即使使用 npm install @firebase/testing@0.19.2 来获取最新的测试 SDK 也无济于事。当您说调用firebase代码将始终返回值“3”时,我不确定是否使用了伪造/间谍,而实际上firebase是真实的,无论它是什么,它都不会在茉莉花中工作。在这个链接stackoverflow.com/questions/46229787/… 中有更多指导 - 但它仍然感觉像黑魔法......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    相关资源
    最近更新 更多