如何避免 Typescript 转译 Jest __mocks__
Posted
技术标签:
【中文标题】如何避免 Typescript 转译 Jest __mocks__【英文标题】:How to avoid Typescript transpiling Jest __mocks__ 【发布时间】:2018-08-29 12:31:30 【问题描述】:对于我拥有的每个手动模拟,我都会收到来自 Jest 的警告,因为它会同时找到它的 .ts 和 .js 版本并要求我删除一个,即:
jest-haste-map: duplicate manual mock found:
Module name: feedTestData
Duplicate Mock path: /Users/[username]/Documents/git/[projectname]/src/state/ducks/feed/__mocks__/feedTestData.ts
This warning is caused by two manual mock files with the same file name.
Jest will use the mock file found in:
/Users/[username]/Documents/git/[projectname]/src/state/ducks/feed/__mocks__/feedTestData.ts
Please delete one of the following two files:
/Users/[username]/Documents/git/[projectname]/dist/state/ducks/feed/__mocks__/feedTestData.js
/Users/[username]/Documents/git/[projectname]/src/state/ducks/feed/__mocks__/feedTestData.ts
我尝试在我的tsconfig.json
中使用exclude
键,但我找不到与所有__mocks__
文件夹匹配的全局模式。
即"exclude":["**/__mocks__/*"]
从我的 dist
文件夹中删除根 __mocks__
文件夹,但不删除任何子文件夹。
对于它的价值,我正在使用 Expo+React Native。我在package.json
中的 Jest 设置如下所示:
"jest":
"preset": "react-native",
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"json"
],
"transform":
"^.+\\.(js)$": "<rootDir>/node_modules/babel-jest",
"\\.(ts|tsx)$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
,
"transformIgnorePatterns": [
"node_modules/(?!(jest-)?react-native|react-navigation)"
],
"testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$",
"testPathIgnorePatterns": [
"\\.snap$",
"<rootDir>/node_modules/",
"<rootDir>/dist/"
],
"cacheDirectory": ".jest/cache",
"collectCoverageFrom": [
"src/**/*.ts,tsx",
"!**/node_modules/**",
],
"setupFiles": [
"./src/global-mock-fetch.ts",
"./__mocks__/redux-mock-store.ts"
],
"automock": false
【问题讨论】:
【参考方案1】:是否有可能通过指示打字稿不转译模拟目录中的文件来解决问题?
我在 Angular + jest 设置中取得了成功,我的 tsconfig 中有以下内容:
"exclude": [
"**/__mocks__/*"
]
希望对你有帮助。
【讨论】:
谢谢,但正如问题中提到的,我试过了 :-) 没有骰子。 "即 "exclude":["*/__mocks__/"] 从我的 dist 文件夹中删除根 mocks 文件夹,但不删除任何子文件夹。" 好的——我看了一些我的项目设置,我可以看到我最终通过添加绝对路径来解决它。所以我把这个问题加了书签,希望有人能回答:) 为所有的东西添加绝对路径很糟糕。 如果 'mocks' 仍在您的 dist 文件夹中,请检查是否有 index.ts 文件引用了 'mocks' 文件夹。生成索引文件后我遇到了同样的问题。 index.ts 文件中有 export * from 'mocks' 行。以上是关于如何避免 Typescript 转译 Jest __mocks__的主要内容,如果未能解决你的问题,请参考以下文章
您如何将伊斯坦布尔代码覆盖率与转译的 Typescript 一起使用?
如何使用 jest.fn() 在 jest 中使用 typescript 模拟函数
使用 Jest 进行测试时如何使用 `import.meta`