运行estest在ScriptTransformer._transformAndBuildScript中获得“意外字符串”

时间:2018-07-16 15:24:39

标签: vue.js jestjs

在Vuejs项目中, 节点版本:v10.6.0

Package.json版本:

 "devDependencies": {
    "@vue/cli-plugin-babel": "^3.0.0-rc.4",
    "@vue/cli-plugin-unit-jest": "^3.0.0-rc.4",
    "@vue/cli-service": "^3.0.0-rc.4",
    "@vue/test-utils": "^1.0.0-beta.20",
    "babel-core": "7.0.0-bridge.0",
    "babel-jest": "^23.0.1",
    "vue-template-compiler": "^2.5.16"
  },

当我使用内置任务运行它时,

"test:unit": "vue-cli-service test:unit"

但是我想调试,所以我用node命令手动运行:

node  node_modules/.bin/jest

它给出以下错误:

 FAIL  tests/unit/HelloWorld1.spec.js
  ● Test suite failed to run

    .../tests/unit/HelloWorld1.spec.js:1
    ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import "core-js/modules/es6.array.iterator";
                                                                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    SyntaxError: Unexpected string

      at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:403:17)

我添加了.babelrc并包含以下内容

{"env": {
    "development": {
        "plugins": ["transform-es2015-modules-commonjs"]
    },
    "test": {
        "plugins": ["transform-es2015-modules-commonjs"]
    }
}}

情况有所改善,它可以通过测试文件而无需“导入”,一旦导入,它将显示另一个错误:

....tests/unit/HelloWorld1.spec.js:3
    import _interopRequireWildcard from "..../node_modules/@babel/runtime/helpers/builtin/es6/interopRequireWildcard";
           ^^^^^^^^^^^^^^^^^^^^^^^

    SyntaxError: Unexpected identifier

      at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:403:17)

4 个答案:

答案 0 :(得分:12)

奋斗了几天。最终,我得到了在VueJs应用程序的调试模式下运行笑话的解决方案。

在调试vue-cli-service并依次@vue/cli-plugin-unit-jest之后,我发现了下面的代码,然后才产生了有趣的过程:

 process.env.VUE_CLI_BABEL_TARGET_NODE = true
 process.env.VUE_CLI_BABEL_TRANSPILE_MODULES = true

解决方案

因此解决方案非常简单。

只需在运行jest命令之前添加这两个环境变量即可。以下命令将在调试模式下启动:

export VUE_CLI_BABEL_TARGET_NODE=true
export VUE_CLI_BABEL_TRANSPILE_MODULES=true
./node_modules/jest/bin/jest.js --clearCache
node --inspect-brk ./node_modules/jest/bin/jest.js -i

注释

  • 请确保不要添加“ .babel.rc”,这会增加VueJS babel的质量。

  • 通常,您需要使用--clearCache选项来开玩笑。否则,过时生成的文件也将混乱。

  • 笑话选项-i也很重要。否则,测试将在单独的进程中运行,该进程不会处于调试模式。

答案 1 :(得分:1)

有同样的问题。

l2

尝试了以上答案。This article解决了我的问题。

解决方案:

  1. npm卸载“ @ vue / cli-plugin-unit-jest”
  2. 已删除所有内容的测试文件夹
  3. 已删除jest.config.js文件
  4. vue添加@ vue / cli-plugin-unit-jest
  5. 对于VS Code,请使用下一个launch.json

l1

答案 2 :(得分:0)

另一种解决方案是确保节点环境正确解析。
就我而言,它将解决为“发展”。将我的package.json更新为以下解决了该问题:

"test": "NODE_ENV=test jest"

这将确保您的babel配置使用测试配置。

答案 3 :(得分:0)

您的测试套件以前是否正常工作,现在是否会引发此错误?这就是我所发生的事情,在深入研究高端产品之前,很有可能会缓存导致此问题的东西。

我使用npm test -- -u

解决了该问题

如果失败,则应删除node_modules文件夹并重新进行npm install,然后尝试npm cache clean --force

如果要在没有缓存的情况下运行测试,另一个有用的命令是npm test -- --no-cache -u