reactjs - Jest 找不到 MONGO_URI 的 .env.local
问题描述
我有一个使用 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'
};
我在这里想念什么?
解决方案
没有在.env.local
测试环境中加载,因为您希望测试对每个人产生相同的结果。
但是您仍然可以使用环境变量进行测试。
1. 选项
您可以使用env.test
文件并将以下内容添加到 globalSetup.js 文件中
...
import { loadEnvConfig } from '@next/env'
export default async () => {
const projectDir = process.cwd()
loadEnvConfig(projectDir)
}
...
确保在globalSetup.js
文件中设置jest.config.js
文件:
...
globalSetup: ['<rootDir>/test/globalSetup.js'] // path to file
...
当您运行测试时,控制台中应该有一个日志:
Loaded env from C:\Users\XXX\XXX\XXX\nextjs\.env.test
更多信息:Next.js 环境变量文档
2. 选项
您可以将dotenv 包用于带有 env.local 文件的测试环境。
将此添加到您的 jest-setup.js 文件中:
import dotenv from 'dotenv'
dotenv.config({ path: '.env.local' })
推荐阅读
- javascript - 在 Puppeteer 中没有选择的 HTML 元素
- spring-boot - SpringBoot 和 Cassandra 分页
- python - 如何将条件 for 循环转换为列表理解?
- oracle-apex - HTTP 失败,在 URL 调用过程中发生错误。ORA-12535: TNS: 操作超时
- php - 如何使用正则表达式提取最后 2 个分隔数字
- rust - 什么是 Rust 相当于 python 中的“pip show package”?
- javascript - 使用 Bing 脚本报告设备类型
- javascript - 如何在 Google Apps 脚本中使用 RegExp 匹配常量字符串之前的所有内容?
- c++ - 如果第二个参数在其中一次迭代中发生变化,“for”循环的迭代次数是否会发生变化?
- flutter - 如何在颤动的屏幕顶部中心显示自定义对话框?