Облачная функция Firebase - модульное тестирование. Пожалуйста, предоставьте приложение Firebase в конструкторе для DataSnapshot, чтобы использовать метод .ref - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь настроить Unit Testing для облачных функций 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)

Любой намек на то, что я делаю неправильно?

1 Ответ

0 голосов
/ 08 июня 2018

test.data.makeDataSnapshot имеет необязательный третий параметр, который является приложением Firebase (см. https://firebase.google.com/docs/reference/functions/test/test.database#.makeDataSnapshot). Однако, поскольку вы инициализировали тест firebase-functions-test со значениями конфигурации вашего проекта, обычно вам не нужно указыватьit.

Однако у вас есть эта строка: adminInitStub = sinon.stub (admin, 'initializeApp');

Это вызывает следующую строку для инициализации поддельного приложения, так как метод initializeApp был заглушенчтобы ничего не делать

Это приводит к двум сбоям, чтобы исправить, удалить: adminInitStub = sinon.stub (admin, 'initializeApp');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...