Firebase 函数 : storage cannot be stubbed when writing unit tests

标签 firebase mocha.js firebase-storage sinon google-cloud-functions

我在 index.js 中有以下函数代码:

var admin = require('firebase-admin');
admin.initializeApp();
admin.storage();

和下面的测试代码:

var assert = require('assert');
var sinon = require('sinon');
describe('Event Sourcing', function() {
  var myFunctions, adminInitStub, adminStorageStub,admin;

  before(() => {
    admin =  require('firebase-admin');
    adminStorageStub = sinon.stub(admin, 'storage');
    adminInitStub = sinon.stub(admin, 'initializeApp');

    myFunctions = require('../index');
  });

  after(() => {
    // Restoring our stubs to the original methods.
    adminInitStub.restore();
    adminStorageStub.restore();
  });

  describe('CREATED', function() {
      it('should return -1 when the value is not present', function() {
            assert.equal(-1, [1,5,3].indexOf(4));
          });
    });
});

由于某些奇怪的原因,我不断收到以下错误 Error: The default Firebase app does not exist。确保在使用任何 Firebase 服务之前调用 initializeApp()。 但我已经清楚地标记了它。为什么 stub 适用于 initializeApp() 但不适用于 storage()。

谢谢!

最佳答案

admin.storage() 实际上是一个 getter,因此需要这样 stub

adminStorageStub = sinon.stub(admin, 'storage').get(() => {
  return () => {
    return {bucket: (() => {})};
  }
});

可以在此处找到有关 sinon stub 的更多信息 http://sinonjs.org/releases/v2.0.0/stubs/

关于Firebase 函数 : storage cannot be stubbed when writing unit tests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47631782/

相关文章:

testing - sinon stub 不工作

firebase - 用于调整图像大小的 Firestore 扩展陷入无限循环

android - Firebase 上传卡住 UI

javascript - 如何等待所有数据下载到Firebase(Firestore)存储中?

unit-testing - 使用 mocha : can't find/api/services/myService 测试 sails.js

java - 如何为 TensorFlow Lite 模型指定 Firebase 模型输入以对 Android 中的项目推荐进行预测

javascript - angularfiresignedIn 函数仅在页面刷新时评估?

angular - 如何在运行下一行代码 Angular2 之前等待 AngularFire2 订阅完成

javascript - beforeEach 具有用于 Mocha 测试的套件语法

ios - Firebase 中用户和数据库之间的链接