无法使用 Jest 中的 openlayers 模块测试任何代码

Posted

技术标签:

【中文标题】无法使用 Jest 中的 openlayers 模块测试任何代码【英文标题】:Unable to test any code using an openlayers' module in Jest 【发布时间】:2019-05-11 11:03:37 【问题描述】:

我正在尝试为碰巧导入一个或两个 openlayers 模块的某些模块编写一些测试。但正如其他一些人发现的那样(here、here 和 here),这不是开箱即用的。这是我尝试过的:

.babelrc 重命名为babel.config.js 并导出配置 已将transformIgnorePatterns 添加到我的jest.config.js

我现在不知道该怎么解决这个问题。

我正在使用:

非 CRA webpack 配置 Jest v23.6.0 babel-core 6.26.3 打字稿 3.1.3 ts-jest 22.4.6

这是我的配置:

开玩笑:

module.exports = 
  setupFiles: [
    "./testConfig/test-shim.js",
    "./testConfig/test-setup.js"
  ],
  transform: 
    "^.+\\.tsx?$": "ts-jest"
  ,
  transformIgnorePatterns: [
    "/node_modules/(?!(ol)/).*/",
    "node_modules/(?!(ol)/)",
  ],
  testRegex: "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx|tsx?)$",
  moduleNameMapper: 
    "^(Controllers|Api|Utilities)/(.*)$": "<rootDir>Scripts/$1/$2"
  ,
  moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"],
  coverageReporters: ["text", "text-summary", "html"],
  coverageDirectory: "testConfig/coverageReport",
  collectCoverageFrom: ["**/Scripts/App,Controllers,Utilities,Localization,EntryPoints/**/*.ts,tsx"],
  coverageThreshold: 
    global: 
      branches: 0,
      functions: 0,
      lines: 0,
      statements: 0
    
  
;

【问题讨论】:

【参考方案1】:

终于搞定了。问题在于该项目使用的是 TypeScript,并且像往常一样,这使事情变得比需要的复杂得多。

由于需要编译 OL 源,并且这些文件是用 javascript 编写的,我需要在我的配置中添加另一个转换来处理这些文件。之后,它抱怨画布,所以我还必须安装一个画布模拟。

所以我的配置的更改部分如下:

  setupFiles: [
    "./testConfig/test-shim.js",
    "jest-canvas-mock", // <- the new mock
    "./testConfig/test-setup.js"
  ],
  transform: 
    "^.+\\.tsx?$": "ts-jest",
    "^.+\\.jsx?$": "babel-jest", // <- also compile js/x files
  ,
  testRegex: "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$",
  transformIgnorePatterns: [
    "node_modules/(?!(ol)/)", // <- exclude the OL lib
  ],

希望这对其他人有帮助!

【讨论】:

我也遇到了同样的问题!您能否发布一些其他配置文件的内容?

以上是关于无法使用 Jest 中的 openlayers 模块测试任何代码的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 ts-jest 转换 node_modules 中的文件夹

渲染中的错误:“TypeError:无法读取未定义的属性'_t'”在使用 Jest 的单元测试中

使用 <script setup> 时无法使用 Jest 访问 Vue 单文件组件中的方法

Monorepo 中的 Jest 项目无法在项目中找到配置文件

使用 jest 时 axios mock 无法处理默认标头

将 Jest 与 Nuxt 组件一起使用时无法读取未定义的属性 $loading