使用 Jest 在 Nodejs 中测试 Azure 函数 - process.env 变量显示未定义

Posted

技术标签:

【中文标题】使用 Jest 在 Nodejs 中测试 Azure 函数 - process.env 变量显示未定义【英文标题】:Test for Azure function in Nodejs using Jest - process.env variable showing undefined 【发布时间】:2019-09-11 09:53:41 【问题描述】:

由于“process.env 变量未定义”,Azure 函数测试(使用 jest)失败。现有代码在正常调试中完美运行,但在“yarn run jest”命令中,它显示 process.env 变量未定义。每个配置都存储在 local.settings.json 中。

我试过“test process.env with Jest”这个链接。但是我的生产服务器不能接受多个声明

【问题讨论】:

【参考方案1】:

你可以在 beforeEach 方法中使用 jest.resetModules() 来重置已经需要的模块

beforeEach(() => 
  jest.resetModules()
  process.env =  ...OLD_ENV ;
  delete process.env.NODE_ENV;
);

在这里您可以找到完整的指南。

https://jestjs.io/docs/en/jest-object.html#jestresetmodules

您发布的链接是通过创建如下实现的理想方式

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

  beforeEach(() => 
    jest.resetModules() // this is important
    process.env =  ...OLD_ENV ;
    delete process.env.NODE_ENV;
  );

  afterEach(() => 
    process.env = OLD_ENV;
  );

  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
  );
);

希望对你有帮助。

【讨论】:

感谢您的回复,但在我的代码中,我没有任何 .env 文件。它将取自“local.settings.json”文件。那我该如何联系呢?

以上是关于使用 Jest 在 Nodejs 中测试 Azure 函数 - process.env 变量显示未定义的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NodeJS 解决 Supertest 和 jest 中的 ECONNREFUSED 错误?

Nodejs/NestJS ExceptionFilter Catch 方法的 Jest 单元测试

用 Jest 模拟基于承诺的请求

用 Jest 测试 GraphQL 解析器

对于这些场景,如何使用 Jest 为无服务器测试创建测试?

如何无需在推荐的框架中编写测试用例即可获得 nodejs 应用程序的代码覆盖率?