node.js - 为什么 process.env.FIRESTORE_EMULATOR_HOST 在测试环境中是未定义的?即使我已经运行了模拟器

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

我在用

  • Node 14
  • firebase 功能测试:0.2.3
  • firebase-admin: 9.6.0
  • 火力基地功能:3.13.2
  • Firebase 工具:9.10.0
  • Mocha :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运行模拟器后,我尝试控制台记录这些值,但我得到了这样的未定义
    enter image description here
    我预计
    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/

    相关文章:

    node.js - 服务器在 Angular 中运行时从 Assets 加载新图像

    javascript - 在 firebase 中使用用户副本时,$$conf 被添加到对象中,因此我无法将用户复制到新位置?

    javascript - 如何获取Firebase存储下载url的值并将其存储在firebase存储中....,

    firebase - 在我的 Flutter Web 应用程序中按 Altright 时出错

    javascript - 想要在js中匹配firestore数据库中的电子邮件和密码

    firebase - Flutter - 从其他页面的流构建器获取数据

    node.js - sockjs 140秒后关闭

    node.js - Cloud Functions for Firebase 数据库 onWrite 触发了两次

    node.js - 使用 Kinesis MultiLangDaemon/KCL 调试 nodejs

    javascript - 使用 Firebase Cloud Functions 访问地理点?