为 Typescript、es6 和 Webpack 2 配置 Jest

2024-01-11

在我的 tsconfig 中,我当前将模块 compilerOption 属性设置为“es6”,但是,当我运行 Jest 时,我收到以下错误:

Test suite failed to run

  ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){require('ts-jest').install();import { User } from './models/user;
                                                                                                                         ^^^^^^
SyntaxError: Unexpected token import

   at transformAndBuildScript (node_modules\jest-runtime\build\transform.js:320:12)
      at process._tickCallback (internal\process\next_tick.js:103:7)

如果我将模块切换到“commonJS”,那么测试就可以正常运行。但是,我不需要这样做,因为 babel 插件“transform-es2015-modules-commonjs”应该为我将 ES 模块转换为 commonJS(或者我的理解不正确?)。

我怀疑我错误配置了一些小但重要的东西。谁能指出我在哪里遇到了麻烦?

提前致谢。

.tsconfig

    {
      "compilerOptions": {
        "module": "es6", // Changing this to "commonJS" resolves the error.
        "target": "es6",
        "moduleResolution": "node",
        "baseUrl": "src",
        "allowSyntheticDefaultImports": true,
        "noImplicitAny": false,
        "sourceMap": true,
        "outDir": "ts-build",
        "jsx": "preserve",
        "experimentalDecorators": true,
        "noUnusedLocals": true,
        "noUnusedParameters": true
      },
      "filesGlob": [
          "**/*.ts",
          "**/*.tsx"
      ],
      "exclude": [
        "node_modules",
        "dist"
      ]
    }

.babelrc

{
  "presets": [
    "es2015",
    "react",
    "stage-0",
    {"modules": false}
  ],
  "env": {
    "test": {
      "plugins": [
        "transform-es2015-modules-commonjs"
      ]
    }
  }
}

package.json 的 Jest 部分

  "jest": {
    "transform": {
      "\\.(ts|tsx)$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
    },
    "moduleFileExtensions": [
      "ts",
      "tsx",
      "js"
    ],
    "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$",
    "moduleNameMapper": {
      "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",
      "\\.(css|less)$": "<rootDir>/__mocks__/styleMock.js"
    },
    "testPathDirs": [
      "./src"
    ],
    "collectCoverage": true,
    "testResultsProcessor": "<rootDir>/node_modules/ts-jest/coverageprocessor.js"
  }

注:我也关注了官方推荐 http://facebook.github.io/jest/docs/webpack.html#using-with-webpack-2用于使用 webpack 2 进行设置。


这似乎是一个已知问题 https://github.com/kulshekhar/ts-jest#known-limitations-for-ts-compiler-options,进一步参考here https://github.com/kulshekhar/ts-jest/issues/58.

我能够通过为 jest 添加单独的覆盖 tsconfig 设置来解决该问题。

 "globals": {
      "__TS_CONFIG__": {
        "module": "commonjs",
         jsx": "react"
      }

因此我的项目可以继续以 es6 模块为目标。

这给了我部分解决方案。最终的解决方案看起来像这样

包.json

{
  "private": true,
  "version": "0.0.0",
  "name": "example-typescript",
  "dependencies": {
    "react": "16.4.1",
    "react-dom": "16.4.1",
    "lodash-es": "^4.17.11"
  },
  "devDependencies": {
    "babel-cli": "^6",
    "babel-core": "^6",
    "babel-plugin-source-map-support": "^2.0.1",
    "babel-plugin-transform-es2015-classes": "^6.24.1",
    "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2",
    "babel-plugin-transform-runtime": "^6.23.0",
    "babel-polyfill": "^6",
    "babel-preset-env": "^1.6",
    "babel-preset-stage-0": "^6",
    "babel-runtime": "^6",
    "babel-jest": "^22.0.3",
    "babel-plugin-transform-imports": "^1.5.1",
    "babel-preset-es2015": "^6.24.1",
    "@types/jest": "^23.1.1",
    "@types/node": "^10.12.3",
    "jest": "*",
    "typescript": "*",
    "ts-jest": "*"
  },
  "scripts": {
    "test": "jest"
  },
  "jest": {
    "moduleFileExtensions": [
      "ts",
      "tsx",
      "js"
    ],
    "transform": {
      "^.+\\.(|ts|tsx)$": "ts-jest",
      "^.+\\.(js|jsx)$": "babel-jest"
    },
    "transformIgnorePatterns": [],
    "globals": {
      "__TS_CONFIG__": {
        "target": "es2015",
        "module": "commonjs",
        "jsx": "react"
      }
    },
    "testMatch": [
      "**/__tests__/*.+(ts|tsx|js)"
    ]
  }
}

和...一起 .babelrc

{
  "env": {
    "test":{
      "passPerPreset": true,
      "presets": [
        "babel-preset-env"
      ],
      "plugins": [
        "transform-es2015-modules-commonjs",
        "transform-es2015-classes"
      ]
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 Typescript、es6 和 Webpack 2 配置 Jest 的相关文章

  • 为什么我们在打字稿中使用 HTMLInputElement ?

    我们为什么使用 document getElementById ipv as HTMLInputElement value 代替 document getElementById ipv value 功能getElementById返回具有类
  • className 属性是否承担 Reactjs 中 id 属性的角色?

    由于 id 属性在 Reactjs 组件中很少使用 因为 id 属性意味着组件不会被重用 那么是否使用 className 属性来代替 id 呢 如果是这样的话 那么 Reactjs 中相当于 HTML 中的 class 属性的是什么 cl
  • CSF3 中的 Typescript 支持

    我正在使用 CSF3 编写故事 并且我想正确注释我的故事 我用谷歌搜索过 基本上找不到答案 我尝试过一些技巧here https github com storybookjs storybook issues 7677但没有任何效果 我发现
  • 如何在执行新操作时取消先前操作的执行?

    我有一个动作创建器 它会进行昂贵的计算 并在每次用户输入内容时调度一个动作 基本上是实时更新 但是 如果用户输入多个内容 我不希望之前昂贵的计算完全运行 理想情况下 我希望能够取消执行先前的计算并只执行当前的计算 没有内置功能可以取消Pro
  • 如何在react-highcharts中使用图表工具提示格式化程序?

    如何使用图表工具提示格式化程序 我正在使用高图表的反应包装器 我有这样的配置 const CHART CONFIG tooltip formatter tooltip gt var s b this x b each this points
  • 陷入了 React useEffect 的一系列变化

    我正在反应中创建一个表单生成器 在一个简单的文本字段上 我需要 Change currentValue When currentValue已更改 验证它 验证完成后 发出一个事件 有效或无效 这是我的代码 const TextInput p
  • redux 是否会在对存储进行任何更新时评估存储的所有侦听器?

    据我所知 当商店中的任何内容发生变化时 redux 都会通知商店的所有订阅者 无论是对深层嵌套叶子的订阅还是对状态顶层的订阅 在您遵循指导原则的应用程序中 许多单独的组件应该连接到商店 而不是仅仅几个 docs https redux js
  • React - 按下按钮,继续调用函数

    我正在尝试实现缩放功能 onClick 工作正常 但我希望当我按住缩放按钮时它会连续缩放 我如何用 ReactJS 来实现这个 Jquery mousedown效果 按住左键时 https stackoverflow com questio
  • 当没有结果返回时,如何防止 Angular 异步管道频繁进行服务器调用?

    我正在使用async通过管道传入 ngFor 来观察 Observable Observable 是由访问我的服务器的服务创建的 并且在枚举 ngFor 循环时的加载时间 该服务正确地调用服务器 现在对于我不明白的部分 当任何结果返回时 一
  • 如何在 React 组件中使用 CDN

    我正在尝试使用基于 D3 构建的库 称为 Greuler 来动态渲染图形 它的 npm 包似乎已损坏 当我改用 Greuler CDN 时 index html 中的测试图终于起作用了 但是 我正在开发一个 React 应用程序 并且我希望
  • 在 Nestjs 的我的模块中导入另一个模块的存储库

    我正在尝试使用 Nestjs 构建一个应用程序 目前我有两个模块 用户和身份验证 其结构如下 我需要注射用户服务 into 认证服务为了与User实体 所以首先我注入了用户存储库 into 用户服务并导出服务 用户 模块 ts import
  • React:设置 State 或设置 Prop 而无需重新渲染

    Problem 目前 我有一个LoginForm具有 成功 处理函数的组件handleOnSuccess 然后将其链接到父组件onTokenUpdate由 令牌更新 处理函数定义的属性handleUpdateToken 问题是setStat
  • 到子级的角度路由 - 来自不同父级的子级

    我正在使用打字稿进行角度路由 但面临一些路由问题 流程似乎是 我真正想做的是通过Child Child2的一部分 其ID为Child1的Child 路由 但它不显示页面 Child1 用于插入 更新的所有路由都驻留在 Child1 中 而
  • Typescript 从 CDN 导入 .js

    在我的 ts 文件中 我想引用 js 由第三方托管 并使用 js 文件中的一些函数 到目前为止 我发现如何做到这一点的唯一方法是修改 html 页面并插入 ts 本身的标签 除了修改 html 页面之外 还有其他更优雅的方法吗 听起来您正在
  • Typescript 生成带有“#private;”字段的声明 d.ts 文件

    我有一个用 Typescript 编写的库 它分布在 2 个文件中 一个已编译的 ECMAScript 2015 兼容 Javascript 文件index js和一个 Typescript 声明文件index d ts 我的目标是让 Ja
  • 如果“ng-template”是 Web 组件,则将“CUSTOM_ELEMENTS_SCHEMA”添加到该组件的 中以抑制此消息。 (“[错误->]

    电子邮件受保护 cdn cgi l email protection main browser 355 未处理的 Promise 拒绝 模板解析错误 ng template 不是已知元素 1 如果 ng template 是 Angular
  • 表单提交后 Angular2 更新视图

    我正在使用 Angular2 创建一个简单的 CRUD 应用程序 该应用程序由一个列出当前记录的表格和一个用于提交新记录的表格组成 提交表单后更新表格以反映新记录的正确方法是什么 这是我到目前为止所拥有的 export class Pers
  • React router.push 和 router.replace 之间的区别?

    有什么区别React 路由器推送 and 路由器 替换 路由器历史记录就像一个stack of routes 当您使用router replace 您将覆盖堆栈的顶部 当使用router push 它在顶部添加了一条新路线stack 路由器
  • TypeScript 中的类型安全谓词函数

    我的目标是编写谓词函数 isNull and isUndefined例如 在 TypeScript 中满足以下条件 可以独立使用 array filter isNull 可以逻辑组合 array filter and not isNull
  • Apollo 客户端延迟刷新

    In Apollo Client v3React 实现 我使用钩子来使用订阅 当我从订阅接收数据时 我想重新获取查询 但前提是查询之前已执行过并且位于缓存中 有办法实现这一点吗 我首先进行惰性查询 然后在收到订阅数据时手动检查缓存 然后尝试

随机推荐

  • 单独窗口中的 Android Studio 模拟器

    我的 Android Studio 遇到问题 这是我第一次安装Android Studio 问题是 当我安装任何设备时 它会在设备或模拟器周围出现灰色背景 我不知道它是否与最新的 Android Studio 版本有关 因为我已经更新了它
  • C++ 中的头文件和 Java 中的抽象类/接口实现都是相同的想法,这是否正确?

    我对 C 有点熟悉 我知道对于几乎每个头文件 我都必须创建源文件来配合它 现在我正在研究java接口和实现 它看起来是一样的 首先 您只需在一个类中命名变量和方法 然后在其他类中定义它们 C 和Java中的这些东西是不是基本相同或者相似 J
  • 本地站点的 HTML 图像

    我是 HTML 新手 有一个关于图像的简单问题 下面是我正在使用的一个简单的 html 文件 我想将图像放入其中 该图像存储在我网站的主目录中 该网站是本地的 在我的 MacBook 上 h1 My First Heading h1 p M
  • 使用字符串日期对列表进行排序 [Kotlin]

    我有数组列表typeBeanArrayList其中元素有点像日期 例如 30 03 2012 28 03 2013 31 03 2012 2 04 2012 我怎样才能排序降序 Code typeBeanArrayList database
  • 如何通过保持“templateurl”不变来编译 Angular 2 Webpack

    Webpack 通过在中生成 js 来编译 typescript 文件dist文件夹 我发现 webpack 正在将所有 templateurl 更改为 template 如下所示 我的打字稿组件 Component selector ap
  • CListCtrl:如何保持水平滚动位置?

    如何保持 CListCtrl 的水平滚动条位置 我定期转储并重新填充列表控件的内容 因此无需明确记住旧位置并恢复它 滚动就会返回到左上角 我问了一个相关问题 CListCtrl 如何保持滚动位置 https stackoverflow co
  • 雪豹上的 python 需要 32 位 libxml2 吗?

    我在我的 sl mbp 上安装 scrapy 真是太麻烦了 它需要 libxml2 所以我开始安装它 从 macports 安装它似乎并没有拉下 python 绑定 通过 scrapy 的说明从源代码安装它 here http doc sc
  • 在Eclipse中导入ant build.xml

    我有一个使用ant构建的android项目 是否可以在eclipse IDE中导入这个ant项目 更新 有一个选项可以使用 ant 创建项目build xml在 Eclipse 中 现有 ant Buildfile 中的文件 gt 新建 g
  • 按降序对两列最常见的组合进行排序

    我的数据框看起来像这样 A B C 1 3 1 2 1 1 2 3 1 1 2 1 3 1 1 1 2 1 2 1 1 1 3 1 1 2 1 我想将数据减少为仅按降序排序的两列 A 和 B 最常见的组合 输出应该看起来像 A B coun
  • 淘汰赛手风琴绑定断裂

    以下绑定在 1 9 之前有效 ko bindingHandlers accordion init function element valueAccessor var options valueAccessor setTimeout fun
  • 如何将版本信息添加到我的 powershell 脚本中?

    我有一个脚本 test ps1 如下所示 但我希望能够运行 test ps1 version并让它返回当前的version剧本给我 有没有办法做到这一点 lt SYNOPSIS Test DESCRIPTION Desc INPUTS No
  • 使用外部框架将 Vue3 自定义元素集成到 Vue2 应用程序中

    我有一个用 Vue2 编写的应用程序 它还没有真正准备好升级到 Vue3 但是 我想开始在 Vue3 中编写一个组件库 并将组件导入回 Vue2 以便在准备就绪后最终进行升级 Vue 3 2 引入defineCustomElement它工作
  • 更改选择标签中单独选项的 css font-family

    我不知道这是否可能 如果不可能 是否有人可以提出可选的想法 但我试图在选择标签中显示不同字体的下拉菜单 特别是来自 Google 字体目录的字体 在下拉列表中 我尝试通过使用其代表的字体设置每个选项的样式来显示预览
  • IFrame 内 ExtJS 5 应用程序的滚动问题

    Hy 这就是我的测试页面的样子 蓝色区域是父页面 绿色区域是运行 ExtJS 应用程序的 IFrame 内部带有标签的简单视口 如果网站在触摸设备 iPad Android 平板电脑等 上执行 则无法通过在 IFrame 绿色区域 上 擦拭
  • Django choicefield 的初始值

    我遇到一个奇怪的问题 我似乎无法在 django 中的表单中设置其中一个字段的初始值 我的模型字段是 section models CharField max length 255 choices Application Applicati
  • JTextField 与 HTML 标签一起

    我正在研究 Java 7 我正在尝试使用 HTML 标签来格式化文本 我将文本传递到 JTextField text new JTextField text setText p The program performs encryption
  • Elixir 向所有订阅者直播

    我正在尝试在 Elixir 中实现一个无线电服务器 一个进程始终在工作并读取文件 mp3 并发布到主题 radio 当前用于测试目的 当它完成时会重新开始 每个连接订阅主题 radio 我不明白如何将块发送到所有订阅的连接 连接在 2 或
  • 我如何使用 wxwidgets 在 C++ 中访问串行端口数据

    我是电子与通信工程专业的学生 我正在开发一个项目 其中微控制器将数据发送到计算机的串行端口 异步 我目前正在为我的 GUI 工作学习 wxWidgets 我的问题 是否可以使用wxWidgets来获取数据并显示 实施起来是不是非常困难呢 我
  • 如何从 Base 64 字符串获取 MIME-TYPE?

    我从后端获取字符串的 base64 然后用 Javascript 对其进行解码以在浏览器上显示 该字符串可以是任何文件 pdf img docx zip 等 我的 base64 字符串不包含 mime 类型 例如 data applicat
  • 为 Typescript、es6 和 Webpack 2 配置 Jest

    在我的 tsconfig 中 我当前将模块 compilerOption 属性设置为 es6 但是 当我运行 Jest 时 我收到以下错误 Test suite failed to run Object