我有一个应用程序,它依赖于环境变量,如:

const APP_PORT = process.env.APP_PORT || 8080;

我想测试一下,比如:

APP_PORT可以通过Node.js环境变量设置。 或者Express.js应用程序运行在process.env.APP_PORT的端口集上

我如何用Jest实现这一点?我可以设置这些流程吗?env变量之前每个测试或我应该以某种方式模拟它可能?


当前回答

如果使用require("dotenv"),以上所有方法都有效。这是一个没有TypeScript的NodeJS应用程序,如Jialx或Henry Tipantuna所建议的那样。

但如果你在使用ts-jest并且在jest。config。ts文件中。

import dotenv from "dotenv"
dotenv.config()

/* config options below */

其他回答

测试文件:

const APP_PORT = process.env.APP_PORT || 8080;

在./package.json的测试脚本中:

"scripts": {
   "test": "jest --setupFiles dotenv/config",
 }

进来。/环境:

APP_PORT=8080

另一种选择是将其添加到模块之后的jest.config.js文件中。出口的定义:

process.env = Object.assign(process.env, {
  VAR_NAME: 'varValue',
  VAR_NAME_2: 'varValue2'
});

这样就不需要在每个.spec文件中定义环境变量,并且可以全局调整它们。

当使用Typescript以下作品为我:

根: jest.config.js

/* eslint-disable @typescript-eslint/no-var-requires */ const {pathsToModuleNameMapper} = require('ts-jest'); const {compilerOptions} = require('./tsconfig.paths.json'); 模块。出口= { / /[…] moduleNameMapper: pathsToModuleNameMapper (compilerOptions。{prefix: '<rootDir>/'}), }; 的过程。env = Object.assign(进程。env, { env_name:“开发”, another_var:“abc123”, });

你可以在jest.config.js中导入这个

require('dotenv').config()

这对我很有用

我觉得你也可以试试这个:

const currentEnv = process.env;
process.env = { ENV_NODE: 'whatever' };

// test code...

process.env = currentEnv;

这适用于我,你不需要模块的东西