Jestjs 运行Jest时在NextJS中未定义环境变量

Jestjs 运行Jest时在NextJS中未定义环境变量,jestjs,environment-variables,next.js,Jestjs,Environment Variables,Next.js,我设置了一个简单的NextJS项目,在Jest识别环境变量时遇到了问题。我已经尽我最大的能力按照指示去做了,但没能让它工作 这是我问题的简化版本 // .env.test.local MY_ENVIRONMENT_VARIABLE=my_value //我要测试的函数 导出常量getEnvironment=()=>{ const MY_ENVIRONMENT_VARIABLE=process.env.MY_ENVIRONMENT_VARIABLE; 返回MY_环境_变量; }; //我的测试

我设置了一个简单的NextJS项目,在Jest识别环境变量时遇到了问题。我已经尽我最大的能力按照指示去做了,但没能让它工作

这是我问题的简化版本

// .env.test.local
MY_ENVIRONMENT_VARIABLE=my_value
//我要测试的函数
导出常量getEnvironment=()=>{
const MY_ENVIRONMENT_VARIABLE=process.env.MY_ENVIRONMENT_VARIABLE;
返回MY_环境_变量;
};
//我的测试
从“/getEnvironment”导入{getEnvironment};
描述('获取环境',()=>{
它('将具有正确的环境变量',()=>{
const myEnvironmentVar=getEnvironment();
const expectedEnv=“我的价值”;
expect(myEnvironmentVar)、toEqual(expectedEnv);
});
});
我正在用
jest运行jest——看
。我可以看到它得到了环境
测试
,但没有显示我自己指定的变量

上述测试以失败告终

Expected: "my_value"
Received: undefined

如果有任何其他文件与此相关,请发表评论,我将添加我所拥有的。

为了访问这些环境变量,下一步需要在运行测试之前实例化

//将其包含在Jest安装文件中或测试之前
从“下一步”导入下一步;
下一个({});
当前有一个请求将其添加到下一个文档中:


如果环境变量将在面向客户端的代码中使用,请确保遵守的命名约定,前缀为
NEXT\u PUBLIC

因为我问了这个问题,文档已经更新,并且提供了比在测试之前完全启动NEXT更好的答案

建议将环境变量加载到测试环境中的方法是为jest添加一个配置文件,添加一个设置脚本,并在该脚本中使用包含的NextJS
loadEnvConfig
函数

.env.test
可以用虚拟数据填充,并检查到您的repo中。与普通环境变量一样,您可以使用
.env.test.local
-文件在本地重写它们

// jest.config.js
module.exports = {
  globalSetup: '<rootDir>/__test__/setupEnv.js'
}

太好了,成功了!谢谢你的公关链接。我遇到了一个很容易解决的新问题。为了完整起见,我会把它加到你的答案中。欢迎来到Stackoverflow!我在上面的评论中提到的问题已经在问题中而不是在这个答案中修复,以符合答案的编辑规则!需要使用
next({dev:true})
// __test__/setupEnv.js
import { loadEnvConfig } from '@next/env'

export default async () => {
  const projectDir = process.cwd()
  loadEnvConfig(projectDir)
}
# .env.test
MY_ENVIRONMENT_VARIABLE="a-variable-for-testing"