【发布时间】: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