【问题标题】:How to avoid Typescript transpiling Jest __mocks__如何避免 Typescript 转译 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
  }

【问题讨论】:

    标签: typescript react-native jestjs expo


    【解决方案1】:

    是否有可能通过指示打字稿不转译模拟目录中的文件来解决问题?

    我在 Angular + jest 设置中取得了成功,我的 tsconfig 中有以下内容:

    "exclude": [
            "**/__mocks__/*"
        ]
    

    希望对你有帮助。

    【讨论】:

    • 谢谢,但正如问题中提到的,我试过了 :-) 没有骰子。 "即 "exclude":["*/__mocks__/"] 从我的 dist 文件夹中删除根 mocks 文件夹,但不删除任何子文件夹。"
    • 好的——我看了一些我的项目设置,我可以看到我最终通过添加绝对路径来解决它。所以我把这个问题加了书签,希望有人能回答:)
    • 为所有的东西添加绝对路径很糟糕。
    • 如果 'mocks' 仍在您的 dist 文件夹中,请检查是否有 index.ts 文件引用了 'mocks' 文件夹。生成索引文件后我遇到了同样的问题。 index.ts 文件中有 export * from 'mocks' 行。
    猜你喜欢
    • 2017-10-21
    • 2018-12-31
    • 2020-11-06
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 2020-01-01
    • 1970-01-01
    相关资源
    最近更新 更多