NodeJS+Express路由环境变量不可用,Jest+Supertest测试异常
解决Jest测试时dotenv环境变量未加载的问题
问题原因
Jest的运行环境独立于应用启动流程,你之前通过app.js里的require("dotenv").config()或启动脚本的node -r dotenv/config加载环境变量的方式,不会自动作用于Jest测试流程。这就导致测试时路由中间件里的process.env.API_TOKEN为undefined,无法完成Token验证逻辑。
解决方案
方法1:在测试文件中直接加载dotenv
在你的测试文件最顶部添加dotenv加载代码,确保环境变量在测试执行前被注入:
require('dotenv').config(); // 如果.env文件不在测试文件同级目录,需手动指定路径,比如: // require('dotenv').config({ path: '../.env' }); test("POST /cpf/* should fail when authorization token is wrong", async() => { // 原测试代码... });
方法2:通过Jest配置全局加载dotenv
在项目根目录创建或修改jest.config.js,添加setupFiles配置项,让所有测试文件执行前自动加载dotenv:
module.exports = { setupFiles: ['dotenv/config'] };
方法3:修改测试启动脚本
在package.json的scripts字段中修改测试命令,用-r参数预先加载dotenv:
{ "scripts": { "test": "node -r dotenv/config node_modules/jest/bin/jest.js" } }
额外注意点
你的测试用例中期望的错误信息是"Request not authorized => invalid token.",但中间件实际返回的是葡萄牙语"Requisição não autorizada => token de autorização inválido.",两者文本不匹配会导致测试断言失败,需要统一两者的内容。
内容的提问来源于stack exchange,提问作者Edvaldo Silva de Almeida Jr
相关产品推荐
相关产品推荐

