node.js - 用 Jest 测试 process.env

标签 node.js testing environment-variables jestjs

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

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

我想测试一下,例如:

  • APP_PORT 可以由 Node.js 环境变量设置。
  • 或者那个 Express.js应用程序正在使用 process.env.APP_PORT
  • 设置的端口上运行

如何使用 Jest 实现这一目标?我可以在每次测试之前设置这些 process.env 变量还是应该以某种方式模拟它?

最佳答案

我的做法can be found in this Stack Overflow question .

使用 resetModules 很重要在每次测试之前,然后在测试中动态导入模块:

describe('environmental variables', () => {
  const OLD_ENV = process.env;

  beforeEach(() => {
    jest.resetModules() // Most important - it clears the cache
    process.env = { ...OLD_ENV }; // Make a copy
  });

  afterAll(() => {
    process.env = OLD_ENV; // Restore old environment
  });

  test('will receive process.env variables', () => {
    // Set the variables
    process.env.NODE_ENV = 'dev';
    process.env.PROXY_PREFIX = '/new-prefix/';
    process.env.API_URL = 'https://new-api.com/';
    process.env.APP_PORT = '7080';
    process.env.USE_PROXY = 'false';

    const testedModule = require('../../config/env').default

    // ... actual testing
  });
});

如果您想在运行 Jest 之前寻找一种加载环境值的方法,请查找 answer below .您应该使用 setupFiles为此。

关于node.js - 用 Jest 测试 process.env,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48033841/

相关文章:

node.js - 在 NodeJS 中取消转义字符串

node.js - Google 日历与 Node js 应用程序实时同步

java - 如何使用 Gradle 测试编译后的 JAR 文件

c - 为什么 putenv(buf) 无法正常工作,因为 memcpy(buf + 92, "\x00\x14\xe4\xf7", 4) 将 a\x00 字节复制到 buf ?

vbscript - 从 VBScript 重新读取环境变量

javascript - 文件数量计数不正确

java - 在 Android 中使用 Socket.io 进行聊天应用

php - 广告词 API : Using campaigns and ads from live on the sandbox

perl - 在 Perl 中测试查询字符串 unicode 处理

javascript - Vue.js:在 vue.config.js (vue cli 3) 中定义计算环境变量