首页 > 解决方案 > 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'

};

我在这里想念什么?

标签: reactjsmongodbjestjsnext.js

解决方案


没有在.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' })

推荐阅读