Reactjs 开玩笑可以';找不到MONGO_URI的.env.local

Reactjs 开玩笑可以';找不到MONGO_URI的.env.local,reactjs,mongodb,jestjs,next.js,Reactjs,Mongodb,Jestjs,Next.js,我有一个使用MongoDB的NextJS应用程序。我只是为测试添加了笑话。当我运行第一个测试时,出现以下错误: 请在.env.local内定义MONGODB_URI环境变量 4 | 5 | if (!MONGODB_URI) { > 6 | throw new Error('Please define the MONGODB_URI environment variable inside .env.local'); | ^ 7 | } 我确

我有一个使用MongoDB的NextJS应用程序。我只是为测试添加了笑话。当我运行第一个测试时,出现以下错误:

请在.env.local内定义MONGODB_URI环境变量

  4 |
  5 | if (!MONGODB_URI) {
> 6 |     throw new Error('Please define the MONGODB_URI environment variable inside .env.local');
    |           ^
  7 | }
我确实有一个文件
.env.local
,它有一个MONGODB_URI,当我在本地和在prod上运行我的应用程序时,它就会工作

这就是测试:

import React from 'react';
import ReactDom from 'react-dom';
import Home from '../../pages/index';
import { configure, shallow } from 'enzyme';
import Adapter from '@wojtekmaj/enzyme-adapter-react-17';

configure({ adapter: new Adapter() });

describe('<Home />', () => {
    it('should render Home', () => {
        const wrapper = shallow(<Home />);
        console.log('wrapper :', wrapper.debug());
    });
});
从“React”导入React;
从“react dom”导入react dom;
从“../../pages/index”导入主页;
从“酶”导入{configure,shallow};
从'@wojtekmaj/enzyme-Adapter-react-17'导入适配器;
配置({adapter:newadapter()});
描述(“”,()=>{
它('should render Home',()=>{
常量包装器=浅();
log('wrapper:',wrapper.debug());
});
});
My jest.config.js:

module.exports = {
    clearMocks: true,
    coverageDirectory: 'coverage',
    moduleNameMapper: {
        '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
            '<rootDir>/__mocks__/fileMock.js',
        '\\.(css|less)$': 'identity-obj-proxy'
    },
    preset: '@shelf/jest-mongodb'

};
module.exports={
clearMocks:没错,
coverage目录:“coverage”,
模块映射:{
“\ \”(jpg | jpeg | png | gif | eot | otf | webp | svg | ttf | woff | woff2 | mp4 | webm | wav | mp3 | m4a | aac | oga)$:
“/”mocks“/”fileMock.js”,
“\\(css |减去)$”:“标识obj代理”
},
预设:“@shelf/jest mongodb”
};

我在这里遗漏了什么?

您必须传递
jest.config.js
中的
setupFiles
选项

module.exports = {
  setupFiles: ['env.local.config file'],
}

要在nextJS的测试中使用
MONGODB_URI
,我将
.env.test
用于测试环境。

测试环境中不会加载
.env.local
,因为您希望测试为每个人生成相同的结果

但是您仍然可以使用环境变量进行测试

1.选项 您可以使用
env.test
文件,并将以下内容添加到globalSetup.js文件中

。。。
从“@next/env”导入{loadEnvConfig}
导出默认异步()=>{
const projectDir=process.cwd()
loadEnvConfig(项目目录)
}
...
确保在
jest.config.js
文件中设置
globalSetup.js
文件:

。。。
globalSetup:['/test/globalSetup.js']//文件路径
...
运行测试时,控制台中应该有一个日志:

从C:\Users\XXX\XXX\XXX\nextjs\.env.test加载的环境
更多信息请点击此处:

2.选项 可以将用于测试环境的与env.local文件一起使用

将此添加到jest-setup.js文件中:

从“dotenv”导入dotenv
dotenv.config({path:'.env.local'})

Jest不会自动获取您在
.env.local
中的环境变量。您需要在运行测试时设置它们,或者将Jest指向要使用的.env文件。