有没有办法在我的单元测试中使用webpack和mocha来模拟`process.env.NODE_ENV`?

Dim*_*iwa 5 unit-testing mocha.js reactjs webpack jestjs

我需要在单元测试中进行模拟process.env.NODE_ENV.

我正在使用webpack 2.0作为构建版本,jest-cli作为构建运行程序,以及mocha和测试

import { ENV } from '../index';

describe('environments configuration', () => {
  describe('default environment', () => {
    let config;
    beforeAll(() => {
      delete process.env.NODE_ENV;
      process.env.NODE_ENV = ENV.DEFAULT;
      config = require('../index');
    });

    it('should be default login url', () => {
      expect(config.url.login).toEqual('http://localhost:8080/login');
    });

    it('should store token in local storage', () => {
      expect(config.STORAGE.TOKEN.type).toEqual('localStorage');
    });
  });

  describe('development environment', () => {
    let config;
    beforeAll(() => {
      delete process.env.NODE_ENV;
      process.env.NODE_ENV = ENV.DEVELOPMENT;
      config = require('../index');
    });

    it('should be development login url', () => {
      expect(config.url.login).toEqual('https://dev.localhost.com/login');
    });

    it('should store token in local storage', () => {
      expect(config.STORAGE.TOKEN.type).toEqual('localStorage');
    });
  });

  describe('production environment', () => {
    let config;
    beforeAll(() => {
      delete process.env.NODE_ENV;
      process.env.NODE_ENV = ENV.PRODUCTION;
      config = require('../index');
    });

    it('should be production login url', () => {
      expect(config.url.login).toEqual('https://localhost.com/login');
    });

    it('should store token in session storage', () => {
      expect(config.STORAGE.TOKEN.type).toEqual('sessionStorage');
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

不幸的是,这似乎没有诀窍,我总是首先加载默认配置.

我发现这个插件最终可以解决问题.

几乎没有人使用,所以我想知道:

嘲笑的正确方法是process.env.NODE什么?

小智 4

您应该发现在覆盖环境变量之后您可以jest.resetModules();在导入配置之前运行。然后应该加载反映预期值的配置NODE_ENV

如果没有 jest,您可以使用npm 中的require-uncached模块来达到相同的效果。