使用 jest 和 vue 抛出 SyntaxError: Unexpected identifier error for import

Posted

技术标签:

【中文标题】使用 jest 和 vue 抛出 SyntaxError: Unexpected identifier error for import【英文标题】:Using jest and vue throw SyntaxError: Unexpected identifier error for import 【发布时间】:2021-08-08 09:12:18 【问题描述】:

我是 jest 的新手,我在我的项目中使用 vue3 和 jest 26.6.3

//pachage.json

"jest": 
  "moduleFileExtensions": [
    "js",
    "json",
    "vue"
  ],
  "moduleNameMapper": 
    "^@/(.*)$": "<rootDir>/src/$1",
    "^vue$": "vue/dist/vue.common.js"
  ,
  "transform": 
    ".*\\.(vue)$": "<rootDir>/jest/jest-vue",
    ".*": "babel-jest"
  
,

我创建了一个jest-vue文件,内容是

// jest/jest-vue.js

const templateRegex = /<template>([\s\S]*)<\/template>/gm;
const scriptRegex = /<script>([\s\S]*)<\/script>/gm;
const babelJest = require("babel-jest");

module.exports = 
  process(src, filepath, config, transformOptions) 
    templateRegex.lastIndex = scriptRegex.lastIndex = 0;
    const template = templateRegex.exec(src)[1];
    return `$babelJest.process(
      scriptRegex.exec(src)[1],
      filepath + ".js",
      config,
      transformOptions
    );
        exports.default['template']=\`$template\`;
        `;
  ,
;

// app.spec.js

import App from "@/App.vue";

describe('App', () => 
  // Inspect the raw component options
  it("has data", () => 
    expect(typeof App.data).toBe("function");
  );
);

运行纱线测试后,我收到此错误

("Object.":function(module,exports,require,__dirname,__filename,global,jest)[object 对象];

SyntaxError: Unexpected identifier

> 1 | import App from "@/App.vue";

如果您需要在此处查看我的代码,请使用 github repo

【问题讨论】:

【参考方案1】:

我认为这个笑话是缺少与 Vue 的联系。

尝试安装vue-jest必须包含@next

yarn add vue-jest@next

使用vue-test.vue文件进行代码转换

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

你应该很高兴

【讨论】:

以上是关于使用 jest 和 vue 抛出 SyntaxError: Unexpected identifier error for import的主要内容,如果未能解决你的问题,请参考以下文章

两个 shallowmount 抛出错误 Jest VueJs(Vuetify)

如何使用 jest 测试 Vue.js 组件中方法的错误

如何使用 toThrow 和 Jest 断言异步方法抛出错误

为啥 Jest 抛出“无效的钩子调用”?

使用钩子时 Jest/Enzyme 测试抛出错误

模拟 Observable 以在 Jest 中抛出错误