在JEST中使用dotenv路径

7nbnzgx9  于 2023-06-20  发布在  Jest
关注(0)|答案(3)|浏览(115)

我尝试使用不同的.env文件进行Jest测试,但到目前为止我无法使其工作。

package.json:

{
  "name": "task-manager",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "module": "main.js",
  "scripts": {
    "start": "node -r esm src/index.js",
    "dev": "nodemon -r esm -r dotenv/config src/index.js dotenv_config_path=./config/.env",
    "test": "jest --setupFiles dotenv/config --watch"
  },
  "jest": {
    "testEnvironment": "node"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@sendgrid/mail": "^6.3.1",
    "bcryptjs": "^2.4.3",
    "dotenv": "^6.2.0",
    "esm": "^3.2.10",
    "express": "^4.16.4",
    "jest": "^24.3.1",
    "jsonwebtoken": "^8.5.0",
    "mongodb": "^3.1.13",
    "mongoose": "^5.4.17",
    "multer": "^1.4.1",
    "sharp": "^0.21.3",
    "supertest": "^4.0.0",
    "validator": "^10.11.0"
  },
  "devDependencies": {
    "@babel/core": "^7.3.4",
    "@babel/preset-env": "^7.3.4",
    "babel-jest": "^24.3.1"
  }
}

每次运行npm测试时,使用的MONGODB_URL都存储在我的.env文件中,而不是我的test.env文件中
我创建了一个config文件夹来存储我的.env dev文件,以避免这种情况,但现在我的应用程序在运行Jest时不使用env变量。
我在我的开发脚本中设置了一个配置路径,但我不能用Jest做同样的事情。

**预期行为:**我只是想使用不同的MONGODB_URL进行Jest测试。

13z8s7eq

13z8s7eq1#

接受的答案是相当混乱的我,我不能让它工作,必须参考这个问题:Using .env files for unit testing with jest
以下是我如何使它工作:
我的文件结构

-src/
-tests/
------/dotenv-config.js
-jest.config.js
-.test.env
-.env

jest.config.js

module.exports = {
  setupFiles: [
    "<rootDir>/tests/dotenv-config.js"
  ],
  roots: ['<rootDir>/src'],
  testEnvironment: 'node',
  testMatch: ['**/*.test.(ts|tsx)'],
  collectCoverageFrom: ['src/**/*.{ts,tsx}'],
  preset: 'ts-jest',
};

dotenv-config.js

require('dotenv').config({
  path: '.test.env',
});

使用https://www.npmjs.com/package/dotenv中的debug选项查看.test.env是否正确加载。

vdgimpew

vdgimpew2#

您必须显式指定dotenv包应该使用哪个.env
在你的dotenv/config.js文件中,它被用作jest的设置文件,在第一行添加以下内容:
require('dotenv').config({ path: './test.env' })

rsaldnfx

rsaldnfx3#

将envFile与jest一起使用的最简单方法是:
关于package.json

"scripts": {
    "test": "jest"
}

on/jest.config.js

require("dotenv").config({ path: "test/.env" });

module.exports = {};

在本例中,test/.env有我的环境变量用于测试。

相关问题