Jest 找不到 MONGO_URI 的 .env.local
Posted
技术标签:
【中文标题】Jest 找不到 MONGO_URI 的 .env.local【英文标题】:Jest can't find .env.local for MONGO_URI 【发布时间】:2021-05-29 04:28:11 【问题描述】:我有一个使用 MongoDB 的 NextJS 应用程序。我刚刚添加了 Jest 进行测试。当我运行第一个测试时,我收到以下错误:
请在 .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,当我在本地和产品上运行我的应用程序时它可以工作。
这是测试:
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());
);
);
我的 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'
;
我在这里错过了什么?
【问题讨论】:
Jest 不会自动获取您在.env.local
中的环境变量。您需要在运行测试时设置它们,或者将 Jest 指向您要使用的 .env 文件。
【参考方案1】:
.env.local
未加载到测试环境中,因为您希望测试对每个人产生相同的结果。
但您仍然可以使用环境变量进行测试。
1。选项
您可以使用env.test
文件并将以下内容添加到 globalSetup.js 文件中
...
import loadEnvConfig from '@next/env'
export default async () =>
const projectDir = process.cwd()
loadEnvConfig(projectDir)
...
确保在jest.config.js
文件中设置globalSetup.js
文件:
...
globalSetup: ['<rootDir>/test/globalSetup.js'] // path to file
...
当您运行测试时,控制台中应该有一个日志:
Loaded env from C:\Users\XXX\XXX\XXX\nextjs\.env.test
更多信息在这里:Next.js Environment Variables Documentation
2。选项
您可以将dotenv package 用于带有 env.local 文件的测试环境。
在你的 jest-setup.js 文件中添加这个:
import dotenv from 'dotenv'
dotenv.config( path: '.env.local' )
【讨论】:
选项 2 就像一个魅力:)【参考方案2】:在nextJS中,我使用.env.test
作为测试环境。
【讨论】:
【参考方案3】:您必须在jest.config.js
中传递setupFiles
选项
module.exports =
setupFiles: ['env.local.config file'],
在测试中使用MONGODB_URI
【讨论】:
以上是关于Jest 找不到 MONGO_URI 的 .env.local的主要内容,如果未能解决你的问题,请参考以下文章
在使用 jest 的 vue 测试中找不到模块“@jest/globals”
Jest,ts-jest,带有 ES 模块导入的打字稿:找不到模块