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

Unable to test any code using an openlayers' module in Jest

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

我现在不知道如何解决这个问题。

我正在使用:

这是我的配置:

笑话:

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//"
  },
  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
    }
  }
};

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

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

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

  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
  ],

希望这对其他人有帮助!