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”

NestJS Jest 找不到具有绝对路径的模块

Jest,ts-jest,带有 ES 模块导入的打字稿:找不到模块

Jest & TypeScript:VS Code 找不到名称

Jest+vue:“找不到模块 ....vue”