使用firebase-functions-test、mocha测试Firebase云函数时无法读取.env变量
Firebase Functions单元测试无法读取.env环境变量的解决方法
核心问题是Node.js不会自动加载.env文件,firebase emulators:exec执行测试时也不会默认读取该文件中的变量,导致你的requiresEnvVariable函数返回默认值:(,同时测试代码还存在函数名不匹配的问题,以下是具体解决步骤:
1. 安装dotenv依赖
dotenv用于从.env文件加载环境变量到process.env,在functions目录下执行:
npm install dotenv --save-dev
2. 在测试文件中加载.env
修改functions/tests/test.spec.js,在最顶部添加dotenv加载代码:
require('dotenv').config({ path: '../.env' }); // 指定.env文件路径 const { expect } = require("chai") const sinon = require("sinon") const admin = require("firebase-admin") // 剩余代码保持不变
如果需要本地开发时也加载.env,可在functions/index.js顶部添加:
require('dotenv').config(); const functions = require("firebase-functions") // 剩余代码保持不变
3. 修正测试函数名匹配错误
测试代码中调用的myFunctions.getTToken与实际导出的requiresEnvVariable不匹配,需修正:
describe("Unit tests", () => { it("A good and cool test description", async () => { const wrapped = test.wrap(myFunctions.requiresEnvVariable) // 改为正确的函数名 const data = {} const result = await wrapped(data) expect('yayitworked').to.eql(result) }) })
4. 可选:用dotenv-cli管理测试命令
若不想在代码中引入dotenv,可通过dotenv-cli直接在命令中加载.env:
- 安装dotenv-cli:
npm install dotenv-cli --save-dev
- 修改
functions/package.json中的测试脚本:
"tests": "dotenv -e .env mocha --exit tests/*.spec.js"
额外提示
- 确保
.env文件位于functions目录根目录(与package.json同级),否则需调整dotenv的path参数。 - 若使用Firebase官方配置的环境变量(
firebase functions:config:set),需执行firebase functions:config:get > .runtimeconfig.json生成配置文件供测试使用,但自定义.env变量只需用dotenv即可。
内容的提问来源于stack exchange,提问作者gdoug
相关产品推荐
相关产品推荐

