在测试中以随意的方式更改process.env变量

时间:2018-08-23 06:26:39

标签: reactjs jestjs

我正在尝试测试一个函数,该函数具有多个if语句和来自process.env的变量。

我试图像这样在jest中编写测试:

beforeEach(() => {
  delete process.env.REACT_APP_API_KEY;
  delete process.env.REACT_APP_URL;
});

it('no URL', () => { 
  process.env.REACT_APP_API_KEY = 'api_key';
 
  try {
    buildUrl(mockMethod, null);
  } catch (err) {
    expect(err.message).toBe('REACT_APP_API_KEY is not specified!');
  }
});

it('no method', () => { 
  process.env.REACT_APP_URL = 'mock_url';
  process.env.REACT_APP_API_KEY = 'api_key';

  try {
    buildUrl(mockMethod, null);
  } catch (err) {
    expect(err.message).toBe('REACT_APP_API_KEY is not specified!');
  }
});

但是问题在于,每次测试后都不会删除变量。它们以某种方式被缓存,不再设置。

也许有人遇到了这个问题,并提供了一些解决问题的技巧。

1 个答案:

答案 0 :(得分:0)

我设法解决了问题,罪魁祸首是我在文件的上部解构了process.env值-而不是函数本身+我正在重命名它们。

const buildUrl = (method: string, page: number = 1): string => {
  const { API_KEY, URL } = process.env;
  //...
  
  // vs
  
const {
  API_KEY: MY_API_KEY,
  URL: MY_URL
} = process.env;

const buildUrl = (method: string, page: number = 1): string => {
  const MY_API_KEY = ...