将 dotenv 路径与 JEST 一起使用
using dotenv path with JEST
我正在尝试为我的 Jest 测试使用不同的 .env 文件,但到目前为止我无法让它工作。
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 文件
我创建了一个配置文件夹来存储我的 .env 开发文件以避免这种情况,但现在我的应用程序在我 运行 Jest 时不使用环境变量。
我在我的开发脚本中设置了一个配置路径,但我不能用 Jest 做同样的事情。
预期行为:我只想使用不同的 MONGODB_URL 进行 Jest 测试。
您必须明确指定 dotenv
包应使用哪个 .env
。
在用作 jest 设置文件的 dotenv/config.js
文件的第一行添加:
require('dotenv').config({ path: './test.env' })
接受的答案让我很困惑,我不能让它工作,不得不参考这个问题:
我是这样实现的:
我的文件结构
-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
是否正确加载。
我正在尝试为我的 Jest 测试使用不同的 .env 文件,但到目前为止我无法让它工作。
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 文件
我创建了一个配置文件夹来存储我的 .env 开发文件以避免这种情况,但现在我的应用程序在我 运行 Jest 时不使用环境变量。
我在我的开发脚本中设置了一个配置路径,但我不能用 Jest 做同样的事情。
预期行为:我只想使用不同的 MONGODB_URL 进行 Jest 测试。
您必须明确指定 dotenv
包应使用哪个 .env
。
在用作 jest 设置文件的 dotenv/config.js
文件的第一行添加:
require('dotenv').config({ path: './test.env' })
接受的答案让我很困惑,我不能让它工作,不得不参考这个问题:
我是这样实现的:
我的文件结构
-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
是否正确加载。