Vue Jest 测试套件无法运行:SyntaxError: Unexpected identifier

Posted

技术标签:

【中文标题】Vue Jest 测试套件无法运行:SyntaxError: Unexpected identifier【英文标题】:Vue Jest test suite failed to run: SyntaxError: Unexpected identifier 【发布时间】:2019-10-28 23:12:14 【问题描述】:

我已经设置了我的 Jest,它运行正常。但是,当我为包含扩展运算符的文件创建测试时,测试套件会失败。

我正在使用 Jest 从 CLI 配置的 Vue。

我的尝试

我尝试将babel-plugin-transform-object-rest-spread 作为插件添加到 babel.config.js 中,但这没有结果。

我还尝试将@babel/plugin-proposal-object-rest-spread 作为插件添加到 babel.config.js 中,但这也没有结果。

babel.config.js:

module.exports = 
  presets: ["@babel/preset-env", "@vue/app"]
;

package.json(开玩笑的部分):

"jest": 
    "collectCoverage": true,
    "collectCoverageFrom": [
      "**/*.js,vue",
      "!**/node_modules/**"
    ],
    "moduleFileExtensions": [
      "js",
      "json",
      "vue"
    ],
    "moduleNameMapper": 
      "^@/(.*)$": "<rootDir>/src/$1"
    ,
    "transform": 
      "^.+\\.js?$": "<rootDir>/node_modules/babel-jest",
      ".*\\.(vue)$": "<rootDir>/node_modules/vue-jest"
    
  

component.spec.js:

import  shallowMount  from '@vue/test-utils';
import Component from '@/views/xx/x/Component.vue';
import Vue from 'vue';
import BootstrapVue from 'bootstrap-vue';

Vue.use(BootstrapVue);

describe('About component', () => 
  let wrapper;

  beforeEach(() => 
    wrapper = shallowMount(Component);
  );

  test('is a Vue instance', () => 
    expect(wrapper.isVueInstance()).toBeTruthy();
  );
);

错误:

 FAIL  src/__tests__/views/x/Component.spec.js
  ● Test suite failed to run

    D:\projects\project\project-frontend\node_modules\@babel\runtime-corejs2\helpers\esm\objectSpread.js:1
    ("Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest)import _Object$getOwnPropertyDescriptor from "../../core-js/object/get-own-property-descriptor";
                                                                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    SyntaxError: Unexpected identifier



      at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:471:17)
      at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:513:25)
      at src/views/xx/x/Component.vue:670:49
      at Object.<anonymous> (src/views/xx/x/Component.vue:810:3)

【问题讨论】:

我在 JEST 和 vue-test-utils 中运行测试用例时遇到了类似的问题。您找到查询的解决方案了吗? 很遗憾,我还没有找到解决方案。 【参考方案1】:

在 package.json 中 确保这个插件的“babel-core”版本达到 ^7.0.0-0 下。

“开发依赖”: "babel-core": "^7.0.0-0"

【讨论】:

【参考方案2】:

对我来说,最后一步是在 jest config 中提供正确的 env 变量,解释为什么它需要它,可以找到 here。同时确保安装了 babel 包

共享整个配置 // 开玩笑

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

module.exports = 
    verbose: true,
    roots: ["<rootDir>/src/", "<rootDir>/spec/"],
    moduleFileExtensions: ['js', 'vue','json'],
    moduleNameMapper: 
    '^@/(.*)$': '<rootDir>/src/$1',
    ,

    transform: 
     "^.+\\.js$": "babel-jest",
     "^.+\\.vue$": "vue-jest",
    , 
   snapshotSerializers: [
   "jest-serializer-vue"
   ]
  

//在json包中

"@babel/core": "^7.9.6",
"@babel/plugin-transform-runtime": "^7.9.6",
"@babel/preset-env": "^7.9.5",
"babel-core": "^7.0.0-bridge.0",
"babel-jest": "^25.4.0",

【讨论】:

以上是关于Vue Jest 测试套件无法运行:SyntaxError: Unexpected identifier的主要内容,如果未能解决你的问题,请参考以下文章

JEST @vue/composition-api + Jest 测试套件无法运行 [vue-composition-api] 在使用任何函数之前必须调用 Vue.use(VueComposition

JEST 测试套件无法运行:TypeError: (0 , _reactRedux.connect) 不是函数

在使用 jest 的 vue 测试中找不到模块“@jest/globals”

测试套件无法运行

测试套件无法运行 - 找不到模块“打字稿”

开玩笑:测试套件无法运行,意外令牌 =