【问题标题】:Is there a way to mock `process.env.NODE_ENV` in my unit test using webpack and mocha?有没有办法在我的单元测试中使用 webpack 和 mocha 来模拟“process.env.NODE_ENV”?
【发布时间】:2017-08-03 08:02:03
【问题描述】:

我需要在我的单元测试中模拟 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');
    });
  });
});

不幸的是,这似乎不起作用,我总是先加载默认配置。

我发现这个plugin 最终可以解决问题。

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

模拟process.env.NODE 的正确方法是什么?

【问题讨论】:

  • 出于兴趣,在测试期间 NODE_ENV 会发生变化的用例是什么?
  • 我不想import { foo, bar, hello, world } from 'config'; 这个文件导出一些依赖于process.env.NODE 的字符串值。我想断言这些值。
  • 您找到解决方案了吗?我想测试一个组件,就好像 process.env.NODE_ENV 是生产,但否则有 process.env.NODE_ENV 作为开发,以便 React 打印道具类型错误。

标签: reactjs unit-testing webpack mocha.js jestjs


【解决方案1】:

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

不用开玩笑,你可以使用 npm 中的 require-uncached 模块来达到同样的效果。

【讨论】:

    猜你喜欢
    • 2019-02-10
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 2013-03-20
    • 2019-09-03
    • 2012-06-29
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多