为什么 process.env.FIRESTORE_EMULATOR_HOST 在测试环境中会未定义?即使我有 运行 模拟器

why process.env.FIRESTORE_EMULATOR_HOST will be undefined in test environment? even though I have run the emulator

我正在使用

如果我运行firebase emulators:start

那么我希望 process.env 会具有类似

的属性
"FUNCTIONS_EMULATOR": "true",
"FIRESTORE_EMULATOR_HOST": "localhost:8080"

现在我需要使用 mocha 为我的云函数创建测试,我将使用 Firestore 和函数模拟器对其进行测试,我给出我的文件名 events_cron_job.test.ts

在我 运行 模拟器之后,我尝试控制台记录这些值,但我得到了这样的未定义

我期待

console.log(process.env.FUNCTIONS_EMULATOR)  // will be "true"
console.log(process.env.FIRESTORE_EMULATOR_HOST) // will be "localhost:8080"

我认为这只发生在测试环境中(我正在使用 mocha),我有常规的 http 触发器并且它按预期工作

在运行启用模拟器之前,我尝试在终端上执行这个

export FIRESTORE_EMULATOR_HOST="localhost:8080"
export FUNCTIONS_EMULATOR="true"

然后执行 firebase emulators:start ,但结果是一样的,我仍然对这些值未定义

因为这些值未定义,如果我的笔记本电脑与互联网断开连接,则此测试将不会 运行(即它只会访问生产服务器中的数据,而不是模拟器!),我由于我使用模拟器,即使没有互联网连接,预计测试仍然 运行。

我运行摩卡测试使用

mocha -r ts-node/register src/tests/cloud_function_tests --recursive --extension .test.ts --timeout 60000 --exit

如您在此 Github issue comment 中所见,为了 运行 使用 Firebase 模拟器进行测试,您应该使用以下命令来触发它:

firebase emulators:exec "npm test"

因为这是 Firebase 团队使用模拟器执行测试的方式。