提问者:小点点

如何正确初始化使用云函数的firebase函数测试?


我正在使用

  • 节点14
  • FireBase-Functions-Test:0.2.3
  • FireBase-Admin:9.6.0
  • FireBase-函数:3.13.2
  • FireBase工具:9.8.0

所以我想使用firebase云函数对我的firestore触发器函数执行单元测试,我从这里的文档中阅读了步骤。

我想使用Firebase Emulator执行单元测试。所以我假设我将在脱机模式下初始化SDK。文件上说

如果您希望编写完全脱机的测试,您可以在没有任何参数的情况下初始化SDK:

所以我这样初始化它

import * as firebase from "firebase-functions-test";

const test = firebase();
const wrapped = test.wrap(myFunctions.onCreate);

// rest of my test code

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

错误:无法加载默认凭据。浏览https://cloud.google.com/docs/authentication/getting-started获取更多信息。

因此,即使我将使用Firebase仿真器(脱机),但似乎需要提供凭据,如果使用联机模式,这是一个步骤,如本文文档中所述

所以我像这样初始化SDK

import * as firebase from "firebase-functions-test";

const test = firebase({
    databaseURL: "https://xxx-b843e.firebaseio.com",
    projectId: "xxx-b843e",
}, "../../../service-account.json");

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

// rest of my test code

但当我运行测试时,我有另一个错误

{“严重性”:“warning”,“message”:“warning、FIREBASE_CONFIG和GCLOUD_PROJECT环境变量丢失。初始化firebase-admin将失败”}

错误:../../../service-account.json处的文件不存在,或者它不是文件。指示:没有这样的文件或目录,lstat'/users/xxx/documents/service-account.json'

服务帐户json文件不存在?我相信我这样把路定对了

service-account.json文件如下图所示,我从firebase project Overview-->project Setting-->service accounts-->generate new private key中获得

如果我想在firebase模拟器中初始化firebase函数测试SDK,我应该怎么做?


共1个答案

匿名用户

Error: The file at ../../../service-account.json does not exist

该错误意味着在运行时(启动仿真程序时)找不到service-account.json文件,因为相对路径不正确。

实际上,我使用intellisense引导我到service-account.json路径

intellisense建议的路径相对于执行代码的目录可能不正确。这是因为typescript在运行之前被编译,通常是从libdist文件夹中编译的,这意味着需要更改相对路径。

您可以使用绝对路径/my/absolutepath/to/service-account.json,这是解决此问题的一种快速方法,但不是很容易移植的。

使用不同数量的../../进行实验,以找到service-account.json的确切相对路径。请尝试使用:

  • ../../service-account.json
  • ../../../service-account.json
  • 等...(直到有效为止)

很可能只有几个../