node.js - Firebase 云功能 - 单元测试 - 请在 DataSnapshot 的构造函数中提供 Firebase 应用程序,以便使用 .ref 方法

标签 node.js unit-testing firebase firebase-realtime-database google-cloud-functions

我正在尝试为 Firebase 云功能设置单元测试。我正在关注这些链接:

我正在尝试运行示例代码。代码如下:

const chai          =   require('chai');
const sinon                     =   require('sinon');
const admin                     =   require('firebase-admin');
const projectConfig             =   {
    databaseURL                 :   'https://gr-automation-5e65c.firebaseio.com',
    storageBucket               :   'gr-automation-5e65c.appspot.com',
    projectId                   :   'gr-automation-5e65c',
};

const test                      =   require('firebase-functions-test')(projectConfig, '../gr-automation-5e65c-firebase-adminsdk-jkdtf-849f3d0f65.json');

test.mockConfig( /* removed for Clarity */ );

const assert                    =   chai.assert;

describe('Cloud Functions', () => {
    let myFunctions;
    adminInitStub               =   sinon.stub(admin, 'initializeApp');
    admin.initializeApp();

    //console.log(test);

    before(() => {
        myFunctions             =   require('../lib/index.js');
        //console.log(myFunctions);
        //console.log(admin);
    });

    after(() => {
        test.cleanup();
        admin.database().ref('messages').remove();
    });

    describe('makeUpperCase', () => {

    it('should upper case input and write it to /uppercase', () => {
        const snap = test.database.makeDataSnapshot('input', 'messages/11111/original');

        const wrapped = test.wrap(myFunctions.makeUppercase);

        return wrapped(snap).then(() => {
        return admin.database().ref('messages/11111/uppercase').once('value').then((createdSnap) => {
            assert.equal(createdSnap.val(), 'INPUT');
        });
        });
    })

    });

});

当我运行测试时,出现以下错误:

  Cloud Functions
    makeUpperCase
Uppercasing undefined input
      1) should upper case input and write it to /uppercase
    2) "after all" hook


  0 passing (364ms)
  2 failing

  1) Cloud Functions
       makeUpperCase
         should upper case input and write it to /uppercase:
     Error: Please supply a Firebase app in the constructor for DataSnapshot in order to use the .ref method.
      at DataSnapshot.get ref [as ref] (node_modules/firebase-functions/lib/providers/database.js:186:19)
      at Function.exports.makeUppercase.functions.database.ref.onCreate [as run] (lib/index.js:135:21)
      at wrapped (node_modules/firebase-functions-test/lib/main.js:53:30)
      at Context.it (test/index.test.js:46:13)

  2) Cloud Functions
       "after all" hook:
     Error: The default Firebase app does not exist. Make sure you call initializeApp() before using any of the Firebase services.
      at FirebaseAppError.FirebaseError [as constructor] (node_modules/firebase-admin/lib/utils/error.js:39:28)
      at FirebaseAppError.PrefixedFirebaseError [as constructor] (node_modules/firebase-admin/lib/utils/error.js:85:28)
      at new FirebaseAppError (node_modules/firebase-admin/lib/utils/error.js:119:28)
      at FirebaseNamespaceInternals.app (node_modules/firebase-admin/lib/firebase-namespace.js:105:19)
      at FirebaseNamespace.app (node_modules/firebase-admin/lib/firebase-namespace.js:372:30)
      at FirebaseNamespace.ensureApp (node_modules/firebase-admin/lib/firebase-namespace.js:388:24)
      at FirebaseNamespace.fn (node_modules/firebase-admin/lib/firebase-namespace.js:283:30)
      at Context.after (test/index.test.js:31:15)

有什么提示我做错了什么吗?

最佳答案

test.data.makeDataSnapshot 有一个可选的第三个参数,它是 Firebase 应用(请参阅 https://firebase.google.com/docs/reference/functions/test/test.database#.makeDataSnapshot )。但是,由于您使用项目配置值初始化了 firebase-functions-test,因此通常不需要提供它。

但是你有这一行: adminInitStub = sinon.stub(admin, 'initializeApp');

这导致下一行初始化一个假应用程序,因为initializeApp方法被删除而不执行任何操作

这导致了 2 次失败,需要修复、删除: adminInitStub = sinon.stub(admin, 'initializeApp');

关于node.js - Firebase 云功能 - 单元测试 - 请在 DataSnapshot 的构造函数中提供 Firebase 应用程序,以便使用 .ref 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50754070/

相关文章:

javascript - Node 读流: when does the streaming happen?

javascript - 仅调用众多 Firebase 函数之一

javascript - AngularJS 类型错误 : 'undefined' is not an object' Jasmine test

java - 如何测试 AtomicBoolean 的原子性?

firebase - 离线使用。 Flutter Hamilton 应用架构。写入节点并期望云函数更新数据库,然后监听更新 UI

javascript - 组合我的收藏中唯一的两个字段

javascript - 如何正确取消订阅 socket.io 房间并销毁它?

macos - 如何模拟Safari 10.0?

javascript - 在 Jest : "TypeError: admin.firestore is not a function" 中模拟 Firebase 管理员时出错

firebase - 如果用户不发送,我可以创建日期属性吗?