我有一个应用程序,它依赖于环境变量,如:
const APP_PORT = process.env.APP_PORT || 8080;
我想测试一下,比如:
APP_PORT可以通过Node.js环境变量设置。 或者Express.js应用程序运行在process.env.APP_PORT的端口集上
我如何用Jest实现这一点?我可以设置这些流程吗?env变量之前每个测试或我应该以某种方式模拟它可能?
我有一个应用程序,它依赖于环境变量,如:
const APP_PORT = process.env.APP_PORT || 8080;
我想测试一下,比如:
APP_PORT可以通过Node.js环境变量设置。 或者Express.js应用程序运行在process.env.APP_PORT的端口集上
我如何用Jest实现这一点?我可以设置这些流程吗?env变量之前每个测试或我应该以某种方式模拟它可能?
当前回答
当使用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()
这对我很有用
我有最简单的实现env (specialtest .env)
require("dotenv").config({ path: './test.env' });
const { sum } = require('./sum.js');
describe('sum', () => {
beforeEach(() => {
jest.resetModules(); // remove cache
})
test('should success', () => {
expect(sum(1, 3)).toEqual(4);
})
})
根据@HenryTipantuña的建议,在jest.config.js中导入dotenv,并使用.env。config路径下的Test文件
require('dotenv').config({
path: '.env.test'
})
您可以使用Jest配置的setupFiles特性。文档上说过,
运行要配置或设置的代码的模块的路径列表 测试环境。每个setupFile将在每个测试中运行一次 文件。因为每个测试都在自己的环境中运行,所以这些脚本会 在执行之前立即在测试环境中执行 测试代码本身。
npm install dotenv dotenv that uses to access environment variable. Create your .env file to the root directory of your application and add this line into it: #.env APP_PORT=8080 Create your custom module file as its name being someModuleForTest.js and add this line into it: // someModuleForTest.js require("dotenv").config() Update your jest.config.js file like this: module.exports = { setupFiles: ["./someModuleForTest"] } You can access an environment variable within all test blocks. test("Some test name", () => { expect(process.env.APP_PORT).toBe("8080") })
在我看来,如果您将环境变量的检索提取到一个实用程序中(如果没有设置环境变量,您可能希望包含一个快速失败的检查),那么您就可以模拟该实用程序,这样会更清晰、更容易理解。
// util.js
exports.getEnv = (key) => {
const value = process.env[key];
if (value === undefined) {
throw new Error(`Missing required environment variable ${key}`);
}
return value;
};
// app.test.js
const util = require('./util');
jest.mock('./util');
util.getEnv.mockImplementation(key => `fake-${key}`);
test('test', () => {...});