Импорт «констант» в тесты Jest с именованным импортом

В моем проекте есть папки config и constants. Расположены в src\config\test.ts и src\constants\index.js соответственно.

Я настроил Jest для использования moduleNameMapper, как показано ниже, поэтому я могу просто делать import config from 'config' и import { SOME_CONST } from 'constants'

"moduleNameMapper": {
  "config$": "<rootDir>/src/config/test.js",
  "constants$": "<rootDir>/src/constants/index.js"
}

Тем не менее, в моих тестах любые файлы, которые используют import { SOME_CONST } from 'constants', всегда получают значение undefined для SOME_CONST, тогда как любой, который использует экспорт по умолчанию из config, работает нормально.

Это известная проблема? Я делаю что-то не так здесь? кажется, не могу зафиксировать это.


person dougajmcdonald    schedule 19.06.2018    source источник
comment
Вы нашли решение для этого? Я столкнулся с той же проблемой.   -  person Subhendu Kundu    schedule 29.08.2018
comment
@SubhenduKundu Я не нашел идеального решения, но нашел обходной путь. Похоже, что constants был каким-то зарезервированным импортом. Я изменил на appconstants как в файле, так и moduleNameMapper, и теперь все работает.   -  person dougajmcdonald    schedule 30.08.2018


Ответы (2)


У меня была та же проблема, что и у вас, но в конце концов я нашел эту проблему github, которая решает Это. Похоже, что constants является основным модулем и поэтому оценивается перед сопоставлением модуля jest. Я нашел этот комментарий, который мне помог, ваш тестовый файл:

jest.mock('constants', () => require('path/to/your/constants'))

В качестве альтернативы можно сделать то, что @dougajmcdonald предложил в его комментарии выше, и переименовать псевдоним вашего веб-пакета с constants на что-то другое, например. app-constants.

person Nick Litwin    schedule 27.12.2018

Я тоже столкнулся с этой проблемой: настроить jest с babel-6.

Раньше я много работал с подходом create-react-app (CRA). И когда я столкнулся с этой проблемой, в глубине души я начал по-настоящему ценить потрясающую работу, проделанную facebook. команда в разработке CRA-инструмента.

В любом случае, именно так я решил эту задачу. Перво-наперво, нам нужно расставить все по местам.

  • Примите тот факт, что настройка этих современных инструментов JavaScript требует суеты, поэтому наберитесь терпения.
  • Jest 24 прекратил поддержку babel-6 (это было вся моя проблема, обновление до babel-7 будет сопровождаться множеством других изменений, которых я хотел избежать)
  • Существует так много документации по настройке jest для работы с babel-7, но так мало с babel-6.

Хорошо, с этим по пути, давайте начнем:

  1. Я обновил свой ключ dependencies в соответствии с рекомендациями официальной документации jest. (24.9) для работы с babel-6. И ошибка undefined при запуске тестов сохранилась.
"dependencies": {
  "babel-core": "^6.26.3",
  "babel-jest": "^23.6.0",
  "babel-preset-env": "^1.7.0",
  "jest": "^24.0.0"
}
  1. Я продолжил // comment out несколько строк, чтобы подтвердить, получу ли я лекарство, но, увы, я получил более подробное error сообщение от шутки (по крайней мере, оно было хорошо объяснено, спасибо, ребята).

Скриншот-1: закомментировано import * as C from ... утверждение

Устранение ошибок Jest/Babel

Снимок экрана 2: сообщение об ошибке от jest несмотря на закомментирование оператора констант import.

Подробное сообщение об ошибке из шутки

  1. Наконец, это сработало, после множества «погуглиний» и проб и ошибок я наконец наткнулся на работающую комбинацию зависимостей. Что ж, учитывая, что я постоянно их менял, я решил сохранить их как --devDependencies, настроил babel-jest в качестве преобразователя для моего кода .js и обновил мой файл конфигурации .babelrc babel.
// package.json

  "devDependencies": {
    "babel-core": "6.26.0",
    "babel-jest": "21.2.0",
    "babel-loader": "7.1.2",
    "babel-preset-env": "1.6.0",
    "babel-preset-react": "6.24.1",
    "babel-preset-stage-0": "6.24.1",
    "jest": "21.2.1",
    "webpack": "3.6.0"
  },
  "jest": {
    "transform": {
      "^.+\\.jsx?$": "babel-jest"
    }
  }

// .babelrc

{
  "presets": [
    "env",
    "stage-0",
    "react"
  ]
}
person MwamiTovi    schedule 19.10.2019