当运行Jest时如何设置环境变量

5

我在我的main.ts中定义了这个变量。

const mockMode = process.env.MOCK_MODE;

我只是创建了一个测试,并将此变量设置为true,但在主函数中没有得到"true",而是得到了"false"。
describe('onBook', () => {

    // Arrange
     const mockMode = "true";
     ...

1
使用 Jest 配置中的 globals 选项。请参阅以下链接:https://jestjs.io/docs/en/configuration#globals-object - kmos.w
1个回答

6

您可以在单元测试用例中直接设置 process.env.MOCK_MODE 的值,并在结束时将其恢复为原始值。

例如:

main.ts

export function main() {
  const mockMode = process.env.MOCK_MODE;
  return mockMode;
}

main.test.ts:

import { main } from './main';

describe('main', () => {
  it('should pass', () => {
    const original = process.env.MOCK_MODE;
    process.env.MOCK_MODE = 'true';
    const actual = main();
    expect(actual).toBe('true');
    process.env.MOCK_MODE = original;
  });
  it('should restore MOCK_MODE', () => {
    expect(process.env.MOCK_MODE).toBe('undefined');
  });
});

单元测试结果:

 PASS  src/stackoverflow/59319610/main.test.ts (14.207s)
  main
    ✓ should pass (7ms)
    ✓ should restore MOCK_MODE (1ms)

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

1
当并行运行测试时,这将如何被利用?process.env是否也会为每个测试进行沙盒处理? - Wajahath
4
如果测试失败,这种方法是行不通的。你应该使用 afterEach 来实现。 - Eric Haynes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接