正则表达式在Jest moduleNameMapper中不起作用

我正在尝试使用vue-test-utils和Jest测试Vue CLI项目。我正在使用vue-material-design-icons中的一些图标,但是当我运行Jest时,它们并没有变形。这是我运行Jest时遇到的错误:

    /path/to/node_modules/vue-material-design-icons/Sitemap.vue:1
    ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest) 
    {<template functional>
     ^

    SyntaxError: Unexpected token <

      101 | <script>
      102 | import { mapGetters,mapactions } from "vuex";
    > 103 | import ControllerIcon from "vue-material-design-icons/Sitemap.vue";
          | ^
      104 | import SensorIcon from "vue-material-design-icons/accesspoint.vue";
      105 | import AlphaBoostIcon from "vue-material-design-icons/Alpha.vue";
      106 | 

jest-transform-stub GitHub页面上阅读自述文件之后,我尝试使用以下配置在vue-material-design-icons文件中插入jest.config.js

...
moduleNameMapper: {
  "/vue-material-design-icons\/[\w]+.vue/": "jest-transform-stub","^@/(.*)$": "<rootDir>/src/$1"
},...

...但是它不起作用。我已经在https://regex101.com/https://www.regextester.com/中测试了正则表达式,并且正则表达式在两个站点中都能正常工作。

如果我将文件路径硬编码到配置中,那么它将起作用:

...
moduleNameMapper: {
  "vue-material-design-icons/Sitemap.vue": "jest-transform-stub",...

显然,我不想为项目中每个图标的文件路径进行硬编码。

有人知道为什么正则表达式不起作用吗?

提前谢谢!

fls757126991 回答:正则表达式在Jest moduleNameMapper中不起作用

我弄清楚我做错了什么。首先,这是我的[JsonConverter]配置现在在var keys = [123,3435,455,455] var values = [{name:'shakti'},{name:'amit'},{name:'amiit'},{name:'sad'}] var arr = []; for (var i = 0; i < keys.length; i++) { arr.push(keys[i]); arr.push(JSON.stringify(values[i])); } client.mset(arr,function(err,reply) { console.log(" reply: " + reply); console.log(" err: " + err); client.quit(); }); 中的样子:

moduleNameMapper

此正则表达式现在将与代码文件中的所有jest.config.js导入匹配:

moduleNameMapper: { "^vue-material-design-icons\/[a-zA-Z0-9$_-]+\.vue$": "jest-transform-stub","^@/(.*)$": "<rootDir>/src/$1" },

Jest的vue-material-design-icons/IconName.vue配置对象文档说明“如果提供的模块名称没有边界^vue-material-design-icons\/[a-zA-Z0-9$_-]+\.vue$,可能会导致难以发现错误。” (请参见https://jestjs.io/docs/en/configuration#modulenamemapper-objectstring-string。)

因此,我将RegEx包裹在尖号moduleNameMapper和美元符号^$之间(而不是两个正斜杠^之间),现在一切正常。

注意:$模块是一个简单的模块,“您可以使用...避免在导入非JavaScript资产时出错”(https://github.com/eddyerburgh/jest-transform-stub)。

,

在我的例子中,我忽略了没有被转换的组件的转换模式(在这个例子中是“vue-material-design-icons”和“vue-simple-spinner”)

transformIgnorePatterns: [
    "node_modules/(?!vue-material-design-icons|vue-simple-spinner)"
],
本文链接:https://www.f2er.com/3002037.html

大家都在问