#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