Как определить, что метод среды запущен в файле утилиты JS (CRA)

#javascript #jestjs #create-react-app

#javascript #jestjs #create-react-app

Вопрос:

В моем приложении CRA, util JS file, есть метод pause , который я хотел бы изменить в зависимости от среды, в которой он запущен.

 class CompilationEngine {
  ...
  pause () {
    return new Promise(resolve => emitter.once('next', resolve))
  }
  ...
}
 

Я хочу pause , чтобы функция возвращалась Promise.resolve() в тестовую среду (при запуске npm run start ), поскольку некоторые тесты не выполняются из-за next события, не выданного в консольном тестировании. Итак, как я могу
обнаружить среду и изменить код внутри pause функции.

Комментарии:

1. Вопрос недостаточно ясен, какую среду вы хотите обнаружить. Кажется, что это тестовая среда, но она едва упоминается. Вероятно, это проблема XY, поскольку для тестирования вы можете и обычно будете издеваться над вещами, которые должны вести себя по-разному в тестах.

2. Вместо этого используйте mocks

Ответ №1:

Я думаю, вы ищете

 process.env.NODE_ENV
 

верно?

Ответ №2:

Быстрый ответ

В CRA вы можете использовать переменные среды, объявляющие их перед npm run start

Вы должны создать пользовательские переменные среды, начиная с REACT_APP_ . Пример:

 export REACT_APP_DISABLE_NEXT = true
 

CRA framework предоставит этой оперативной переменной системного уровня простую переменную javascript, готовую к использованию в любой части вашего кода react:

 process.env.REACT_APP_NOT_SECRET_CODE
 

Источник:

Объяснение

Переменные среды, такие как export FOO=BAR , являются переменными на оперативном системном уровне. К этим переменным легко получить доступ с помощью:

 process.env.FOO
 

React не является javascript для nodejs. React будет преобразован в ванильный javascript, чтобы иметь возможность запускать в браузере. В этом javascript process.env не существует.

Но платформа CRA (которая является nodejs) имеет доступ к оперативным системным переменным, поэтому она создает нам эмуляцию process.env, содержащую только переменные, которые начинаются с. REACT_APP_ Любая другая переменная без REACT_APP_ , будет проигнорирована

Совет

  • Выставлять export REACT_APP_DISABLE_NEXT = true только на этапе разработки или тестирования, а не в prod