ruby-on-rails - 使用 Rails + Webpacker + Jest 测试 .js.erb 文件

标签 ruby-on-rails webpack jestjs babeljs babel-jest

我有一个使用 webpacker 的 Rails 5 应用程序,其中包含一个文件 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 时,一切都按预期工作,但是当我尝试运行 yarn test 时,它提示以下错误:
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"
    }
  }
}

最佳答案

以防其他人碰到这个。
您的 .babelrc 似乎缺少“es2015”预设。
Here很好地解释了使用 Rails + Webpacker 配置 JS 测试的这个问题和其他问题。

关于ruby-on-rails - 使用 Rails + Webpacker + Jest 测试 .js.erb 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46224405/

相关文章:

html - 无法从 npm 模块内联字体

webpack - 我可以将 webpack 源映射和源代码文件放在单独的文件夹中吗?

javascript - 在 vuejs 中测试 firebase 函数

ruby-on-rails - 如何将数字数组转换为范围

ruby-on-rails - Rails 自引用关联加入条件

webpack - 部分导入 antd 包不起作用

javascript - 在单元测试中禁用控制台的更好方法

reactjs - 使用 toHaveBeenNthCalledWith 时 react Jest 测试错误

ruby-on-rails - rails 中的 human_attribute_name 和翻译文件

ruby-on-rails - 在 Controller 中进行权限检查的最佳方法。