【问题标题】:why process.env.FIRESTORE_EMULATOR_HOST will be undefined in test environment? even though I have run the emulator为什么 process.env.FIRESTORE_EMULATOR_HOST 将在测试环境中未定义?即使我已经运行了模拟器
【发布时间】:2021-07-10 04:36:08
【问题描述】:

我正在使用

  • 节点 14
  • firebase 功能测试:0.2.3
  • firebase 管理员:9.6.0
  • firebase 功能:3.13.2
  • firebase 工具:9.10.0
  • 摩卡:8.3.2,
  • ts-node: 9.1.1

如果我运行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

【问题讨论】:

  • 你试过像this gitbub issue中描述的那样运行测试
  • @RafaelLemos 是的,这就是解决方案,我终于在 4 天后找到了它。谢谢拉斐尔!
  • 太好了,我会把这个变成答案。

标签: node.js firebase google-cloud-firestore google-cloud-functions mocha.js


【解决方案1】:

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

firebase emulators:exec "npm test"

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

【讨论】:

    猜你喜欢
    • 2020-08-25
    • 2020-03-04
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多