如何在玩笑中将 process.env 设置为未定义

Posted

技术标签:

【中文标题】如何在玩笑中将 process.env 设置为未定义【英文标题】:How to set process.env to undefined in jest 【发布时间】:2021-06-21 12:26:18 【问题描述】:

我正在尝试在我的应用程序中对一个检查process.env.NODE_ENV 值的函数进行单元测试。 FWIW process.env.NODE_ENV 的类型是 string | undefined

在我的玩笑测试中,我可以轻松地测试这样设置的字符串值:

it('test', () => 
  // Arrange
  process.env.NODE_ENV = 'development';

  // Act
  functionUnderTest();

  // Assert
  export(true).toBe(true);
);

当我想测试我的代码对process.env.NODE_ENV 设置为undefined 的处理时,就会出现问题。我希望能够在我的笑话测试中简单地设置process.env.NODE_ENV = undefined。不幸的是,似乎在某个地方,该值被转换为string,这样当测试命中我的函数时,process.env.NODE_ENV 的值是"undefined"(作为字符串)。

我也尝试像这样将process.env.NODE_ENV 设置为undefined,但结果相同:

process.env = Object.assign(process.env,  NODE_ENV: undefined );

如何在开玩笑测试中将process.env.NODE_ENV 设置为undefined

【问题讨论】:

这能回答你的问题吗? Test process.env with Jest 【参考方案1】:

只需deleteprocess.env.NODE_ENV

例如

function functionUnderTest() 
  return process.env.NODE_ENV;


describe('66787053', () => 
  it('test', () => 
    process.env.NODE_ENV = 'development';
    const actual = functionUnderTest();
    expect(actual).toBe('development');
  );

  it('should pass', () => 
    delete process.env.NODE_ENV;
    const actual = functionUnderTest();
    expect(actual).toBeUndefined();
  );
);

测试结果:

 PASS  examples/66787053/index.test.js (6.951 s)
  66787053
    ✓ test (2 ms)
    ✓ should pass

Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        9.061 s

【讨论】:

【参考方案2】:

这对我有用。在package.json

  "jest": 
    "rootDir": "./src",
    "setupFiles": [
      "<rootDir>/jest.env.js"
    ]
  

src/jest.env.js 看起来像

process.env.REGION = 'us-west-2'

【讨论】:

以上是关于如何在玩笑中将 process.env 设置为未定义的主要内容,如果未能解决你的问题,请参考以下文章

Node.js里面怎么设置process.env.PORT的值

Express 设置process.env.NODE_ENV变量

如何模拟 axios API 调用?开玩笑

如何从脚本命令访问 process.env 变量

Node环境变量Process.env

接口环境设置中的process.env.NODE_ENV用法