首页 > 解决方案 > 开玩笑说只转换模块中的某些文件类型

问题描述

我目前有一个使用 jest 进行单元测试的项目。我遇到的问题是其中一个依赖模块需要一个 .css 文件:

./node_modules/problem-module/dist/problem-module.js:

  line 0: require("./problem-module.css");

我将 jest 配置为不忽略该特定模块进行转换,从而解决了需要 CSS 的问题。虽然,现在测试失败了,因为 jest 正在尝试使用 babel-jest 转换模块中的所有 .js 文件,这些文件之前都在模块发布之前通过 babel 运行过。这会导致类似于以下的错误:

TypeError: (0 , problemModuleFunction.default) is not a function

我开玩笑的配置:

  "jest": {
    "testEnvironment": "jsdom",
    "testMatch": [
      "<rootDir>/src/**/*.test.js"
    ],
    "moduleDirectories": [
      "<rootDir>/src",
      "<rootDir>/node_modules"
    ],
    "moduleNameMapper": {
      "\\.(css|scss)$": "<rootDir>/__mocks__/styleMock.js",
      "\\.(jpg|gif|ttf|eot|svg)$": "<rootDir>/__mocks__/fileMock.js"
    },
    "transform": {
      "^((?!mock).)*.(js|jsx)$": "babel-jest",
      "\\.(css|styl|less|sass|scss)$": "<rootDir>/node_modules/jest-css-modules-transform"
    },
    "transformIgnorePatterns": [
        "node_modules/(?!(problem-module))"
    ],
    "setupFilesAfterEnv": [
      "<rootDir>/setupTests.js"
    ],
    "moduleFileExtensions": [
      "css",
      "scss",
      "js",
      "json",
      "jsx"
    ]
  },

确保在不转换任何 JS 文件的情况下正确映射此模块中的 CSS 文件的最佳方法是什么?

标签: javascriptnode.jsjestjsbabeljsbabel-jest

解决方案


推荐阅读