我在用
如果我跑
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 测试使用
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 团队使用模拟器执行测试的方式。
关于node.js - 为什么 process.env.FIRESTORE_EMULATOR_HOST 在测试环境中是未定义的?即使我已经运行了模拟器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67103404/