Протестируйте файл.js.erb с помощью Rails + Webpacker + Jest
У меня есть приложение Rails 5, которое использует webpacker, с файлом app / javascript / packs / components / module_one.js, который я пытаюсь протестировать с помощью Jest. Этот файл содержит импорт в файл.js.erb следующим образом:
// app/javascript/packs/components/module_one.js
import ModuleTwo from './module_two.js.erb'
// ...
module_two.js.erb содержит следующее:
// app/javascript/packs/components/module_two.js.erb
import ModuleOne from './module_one'
// ...
Во время работы webpack-dev-server все работает как положено, но когда я пытаюсь запустить тест пряжи, он выдает следующую ошибку:
FAIL app/javascript/test/module_one.test.js
● Test suite failed to run
/path/to/module_two.js.erb:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import ModuleOne from './module_one'
^^^^^^
SyntaxError: Unexpected token import
at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:306:17)
at Object.<anonymous> (app/javascript/packs/components/module_one.js:1:745)
at Object.<anonymous> (app/javascript/test/module_one.test.js:1:124)
Test Suites: 1 failed, 1 total
Tests: 0 total
Snapshots: 0 total
Time: 2.545s
Ran all test suites.
error Command failed with exit code 1.
Таким образом, кажется, что файл module_two.js.erb не преобразуется должным образом из ES6, потому что, когда я удаляю первую строку module_one.js, он больше не жалуется.
Вот моя текущая настройка:
// .babelrc
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": "> 1%",
"uglify": true
},
"useBuiltIns": true
}]
],
"plugins": [
"syntax-dynamic-import",
["transform-class-properties", { "spec": true }]
],
"env": {
"test": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}
}
// package.json
{
// ...
"devDependencies": {
"babel-jest": "^21.0.2",
"jest": "^21.0.2",
"regenerator-runtime": "^0.11.0",
"webpack-dev-server": "^2.7.1"
},
"scripts": {
"test": "jest"
},
"jest": {
"roots": [
"<rootDir>/app/javascript/test"
],
"moduleDirectories": [
"<rootDir>/node_modules"
],
"moduleFileExtensions": [
"js",
"jsx",
"erb"
],
"transform": {
"^.+\\.jsx?$": "babel-jest",
"ˆ.+\\.jsx?.erb": "rails-erb-loader"
}
}
}
1 ответ
На случай, если кто-то еще столкнется с этим. В вашем.babelrc отсутствует предустановка "es2015". Здесь хорошо объясняется об этой и других проблемах настройки JS-тестирования с помощью Rails + Webpacker.