如何使用 Firebase 模拟器从单元测试中调用 Firebase 函数?

Sim*_*ran 9 javascript firebase-tools firebase-authentication google-cloud-functions

我正在运行 firebase 模拟器。

我的应用程序可以调用 firebase 云函数,如果允许用户(取决于数据库中的值),该函数可以创建自定义用户声明

我正在尝试调用该函数:


import * as firebase from '@firebase/testing';
import * as fs from 'fs';

const app = firebase.initializeTestApp({
  databaseName: 'mydb',
  auth: {
    uid: 'useruid'
  },
});

describe('Firebase Functions', () => {
  beforeEach(async () => {
    await firebase.loadDatabaseRules({
      databaseName: 'mydb',
      rules: fs.readFileSync('database.rules.json', 'utf8'),
    });
  });

  afterAll(async () => {
    await Promise.all(firebase.apps().map((app) => app.delete()));
  });

  const cloudfunction = app.functions().httpsCallable('cloudfunction')

  it('throws error if user is not authenticated', async () => {
    await firebase.assertFail(cloudfunction())
  })
});


Run Code Online (Sandbox Code Playgroud)

这是抛出一个错误:

错误:错误:预检响应具有无效的 HTTP 状态代码 404

小智 3

在我看来,您不需要从单元测试中调用 firebase,因为 firebase 是否正常工作与您无关,您需要测试您的业务逻辑,这意味着您将模拟调用的方法firebase 并测试此方法的预期返回值,例如,您可以编写两种情况,即在没有错误的情况下发送通知,第二种情况,如果 firebase 服务返回失败,对于这两种情况,您的代码应该具有适当的行为。测试 firebase 服务将由处理 firebase 的团队完成