Протестируйте файл .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"
    }
  }
}

person Daniel Olivares    schedule 14.09.2017    source источник
comment
Вам удалось это решить?   -  person Trusislv1    schedule 09.09.2019
comment
@ Trusislv1 не помню, проект с этой проблемой был заброшен   -  person Daniel Olivares    schedule 10.09.2019


Ответы (1)


На случай, если кто-то еще наткнется на это. Кажется, в вашем .babelrc отсутствует предустановка «es2015». Здесь хорошо объясняется этот и другие вопросы настройки тестирования JS с помощью Rails + Webpacker.

person Elkhan Mamedov    schedule 22.12.2017
comment
Годовые пресеты устарели babeljs.io/docs/en/babel-preset-es2015 - person cameck; 15.02.2019