Ответ 1
Мне пришлось добавить это в мой .jestconfig
:
"transformIgnorePatterns": [
"<rootDir>/node_modules/(?!lodash-es)"
]
Я выполняю тесты в существующем проекте, который в настоящее время не имеет тестов. Мои тесты не скомпилируют node_modules/
.
/Users/me/myproject/node_modules/lodash-es/lodash.js:10
export { default as add } from './add.js';
^^^^^^
SyntaxError: Unexpected token export
at transformAndBuildScript (node_modules/jest-runtime/build/transform.js:320:12)
at Object.<anonymous> (app/reducers/kind_reducer.js:2:43)
at Object.<anonymous> (app/reducers/index.js:12:47)
Обходной путь, который я нашел, заключается в "whitelist" node_modules
в node_modules
jest config следующим образом:
"jest": {
"transformIgnorePatterns": [
"!node_modules/"
]
}
Это кажется взломом, потому что для запуска простого теста, который импортирует node_modules/lodash-es/lodash.js
требуется более 1 минуты.
Любая помощь или направление ценится, спасибо!
Мне пришлось добавить это в мой .jestconfig
:
"transformIgnorePatterns": [
"<rootDir>/node_modules/(?!lodash-es)"
]
Публикация более полного ответа здесь:
Jest по умолчанию не преобразует node_modules, потому что node_modules огромен. Большинство модулей узла упакованы, чтобы выставить код ES5, потому что это можно запустить без каких-либо дальнейших преобразований (и в основном обратно совместимых).
В вашем случае lodash-es специально предоставляет модули ES, которые должны быть созданы Jest через babel.
Вы можете попытаться сузить свой белый список, чтобы Jest не пытался передавать каждый файл javascript внутри node_modules через babel.
Я думаю, что правильная конфигурация в вашем случае:
"jest": {
"transformIgnorePatterns": [
"/!node_modules\\/lodash-es/"
]
}
Если ни одно из перечисленных выше решений не помогло вам, попробуйте это в своей шутке.
"moduleNameMapper": {
"^lodash-es$": "lodash"
}
Он заменит lodash-es
версией commonjs во время тестирования.