подключение к эмулятору firestore с помощью @ firebase / testing - PullRequest
2 голосов
/ 05 марта 2020

Я пытаюсь протестировать приложение Firebase локально.

Я запускаю тест с firebase emulators:exec --only firestore 'mocha -r ts-node/register src/**/*.spec.ts

В моей программе c я импортирую @firebase/testing и настраиваю свое приложение и следовал инструкциям из https://firebase.google.com/docs/rules/unit-tests

У меня есть FirebaseService, который представляет собой одноэлементную оболочку для моих методов, в которую я внедряю свое приложение Firebase. В производственном процессе я внедряю firebase, и при тестировании FirebaseService он инициализируется вне службы.

Оболочка довольно проста


export const FirebaseService = (function(): FirebaseSrvc {
  let firebase;
  const fbServiceObj: FirebaseSrvc = {
    getInstance: (firebaseConfig, firebaseCore, initialize) => {
      firebase = firebaseCore;
      if (initialize && firebase.apps.length === 0) {
        firebase.initializeApp(firebaseConfig);
      }

      return fbServiceObj;
    },


    createActivity: async (title: string) => {
      try {
        const firebaseUid = firebase.auth().currentuser.uid;
        const newActivity: ActivityProps = {
          title,
          created_at: 123445,
          created_by: firebaseUid,
          public: false,
          available_to: [firebaseUid],
        };
        console.log(' before create', newActivity);
        const createResponse = await firebase
          .firestore()
          .collection('activities')
          .doc(stringToSafeId(title))
          .set(newActivity);
        console.log('create response', createResponse);
        return true;
      } catch (e) {
        console.log('error creating activity', e);
      }
    },

    getActivity: async (title: string): Promise<ActivityProps> => {
      try {
        const actResponse: DocumentReferenceTo<ActivityProps> = await firebase
          .firestore()
          .collection('activities')
          .doc(stringToSafeId(title))
          .get();
        return actResponse as ActivityProps;
      } catch (e) {
        console.log('error getting activity from firebase', e);
      }
    },
  };

  return fbServiceObj;
})();

. тест, который я пытаюсь запустить, является

import * as firebase from '@firebase/testing';
import { assert } from 'chai';
import 'mocha';
import * as appConfig from '../../app-dev.json';
import { FirebaseService } from '../services/FirebaseService';

firebase.initializeTestApp({ ...appConfig.expo.extra.firebase, auth: { uid: 'random', email: 'test@test.com' } });


describe('Activity', async () => {
  const fb = FirebaseService.getInstance(appConfig.expo.extra.firebase, testApp, false);
  const activityData = new Activity(fb);
  beforeEach(async () => await firebase.clearFirestoreData({ projectId }));

  it('should create a new activity', async () => {
    await activityData.set('test-activity'); // this runs FirebaseService.createActivity
    const findActivity = await activityData.get('test-activity'); // this run FirebaseService.getActivity
    assert(findActivity.title === 'test-activity');
  });
});

. Когда я запускаю тест, я получаю сообщение об ошибке

Your API key is invalid, please check you have copied it correctly.] {
  code: 'auth/invalid-api-key',
  message: 'Your API key is invalid, please check you have copied it correctly.'
}

. Я могу подтвердить, что ключ API, переданный в firebase.initializeTestApp, соответствует Web API Key в моей консоли Firebase.

Я также скачал google-services. json из моей консоли Firebase и перечисляет

{
 "api_key": [
  { "current_key": different_from_web_key}
  ]
}

И я заменил свой существующий ключ этим новый ключ, я все еще получаю ту же ошибку. Я также попытался настроить initializeTestApp({ projectId }), как это делается в примере из документации Firebase, и я получаю тот же результат.

Я использую те же детали проекта для локального запуска проекта в android Studio, и я могу проходить проверку подлинности и писать в firestore, поэтому используемый мной ключ API работает, но, похоже, возникают проблемы при использовании в тестовом приложении.

1 Ответ

1 голос
/ 06 марта 2020

Обычно это не имеет определенного c способа решить эту проблему. Может случиться так, что даже новое копирование и вставка ключа API в параметры может заставить его работать и ошибка исчезнет.

Я бы порекомендовал вам взглянуть на следующие сообщения сообщества, с некоторыми возможными исправлениями ошибки, с которой вы столкнулись.

В дополнение к этому, поскольку у Firebase есть бесплатные предложения поддержки, я думаю, что вы обращаетесь к Поддержка Firebase поможет вам быстро это исправить. Вы должны иметь возможность связаться напрямую бесплатно .

Дайте мне знать, помогла ли вам информация!

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