无法在 Jest 中使用 openlayers 模块测试任何代码
Unable to test any code using an openlayers' module in Jest
我正在尝试为某些碰巧导入一两个 openlayers 模块的模块编写一些测试。但正如其他一些人所发现的那样 (here, here, and 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//"
},
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
],
希望这对其他人有帮助!
我正在尝试为某些碰巧导入一两个 openlayers 模块的模块编写一些测试。但正如其他一些人所发现的那样 (here, here, and 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//"
},
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
],
希望这对其他人有帮助!