问题描述
具有因特定错误消息而失败的单元测试。
Test suite failed to run
Failed to get mock metadata: <path-to-project>/node_modules/lodash/_freeGlobal.js
See: https://jestjs.io/docs/manual-mocks.html#content
问题的根源似乎是应用程序代码中的lodash/isEmpty
用法。依存关系最终缩小为导出_freeGlobal.js
对象的global
。 jest(使用jest-mocks库)无法获取该对象的元数据,因为它无法识别类型。
问题:我有办法模拟全局对象或使Jest正确模拟lodash返回的global
吗?
我完全知道问题发生在哪里。
- 开玩笑地遍历我的打字稿文件中的每个导入
- 确定每个模块的最后一级,
- 通过玩笑模拟来模拟它们
- 在这里开玩笑tries to getMetadata
- 作为元数据的一部分,它尝试获取type name here
- 并且由于
Object.prototype.toString.call(global)
发出[object Window]
,因此它无法检测到typeNamewindow
错误。
环境
"jest": "24.9.0","jest-cli": "24.9.0","jest-dom": "4.0.0","ts-jest": "24.2.0","@types/jest": "24.0.25","babel-jest": "24.9.0",
最佳配置:
"jest": {
"automock": true,"preset": "ts-jest/presets/js-with-babel","testEnvironment": "jsdom","roots": [
"./app/cdap/"
],"modulePaths": [
"./app/cdap/"
],"modulePathIgnorePatterns": [
"./app/cdap/components/AbstractWidget/SchemaEditor/Context/__tests__/schemas.js","./app/cdap/components/AbstractWidget/SchemaEditor/Context/__tests__/data"
],"unmockedModulePathPatterns": [
"<rootDir>/node_modules/lodash/isEmpty","<rootDir>/node_modules/lodash/round","<rootDir>/node_modules/lodash/cloneDeep","<rootDir>/node_modules/react","<rootDir>/node_modules/react-dom"
],"moduleNameMapper": {
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",".scss$": "<rootDir>/__mocks__/styleMocks.js","/^components/": "<rootDir>/app/cdap/components","/^services/": "<rootDir>/app/cdap/services","/^api/": "<rootDir>/app/cdap/api","^lib": "<rootDir>/../lib","^mocks": "<rootDir>/__mocks__"
},"globals": {
"ts-jest": {
"babelConfig": {
"plugins": [
"@babel/plugin-transform-modules-commonjs"
]
}
}
}
}
注意:
尝试过建议from other thread 。当我继续向unmockedModulePatterns
添加特定的lodash模块时,最终我的模块被嘲笑了,所有的测试都失败了。
"unmockedModulePathPatterns": [
"<rootDir>/node_modules/lodash/isEmpty","<rootDir>/node_modules/react-dom"
],
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)