无法使用 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 单文件组件中的方法