【问题标题】:How can I exclude files from Jest watch?如何从 Jest watch 中排除文件?
【发布时间】:2017-03-22 01:25:00
【问题描述】:

我正在使用 Jest 做一些有点奇怪的东西来测试我正在将一些东西写入磁盘的位置。但是,如果我在 Jest 中使用 watch 标志,那么我会发现(很明显)每次我向磁盘写入内容时,测试都会重新启动。

我目前没有任何配置,我查看了the documentation,但我真的不清楚我需要使用哪个选项来禁止观看特定文件。我相信我可以看到从代码覆盖和测试执行中排除代码的选项,但看不到实际的观察者。

在我的情况下,我有这样的设置,我只想隐藏我的结果目录:

  • __tests__
  • __snapshots__(由 Jest 创建)
  • results(由我和要排除的目录创建)
  • testfile1.js

我该怎么做?

【问题讨论】:

    标签: javascript jestjs


    【解决方案1】:

    笑话版本:27.2.1

    为了从测试和覆盖中排除:

    "testPathIgnorePatterns" : [
      "tests/login/default/MockStrategy.js",
    ],
    coveragePathIgnorePatterns: [
      "tests/login/default/MockStrategy.js"
    ],
    

    【讨论】:

      【解决方案2】:

      这是我的 2 美分,因为我觉得上面的答案有些混乱:

      以下是 package.json 文件中的笑话段:

      "jest": {
      "testPathIgnorePatterns": ["wallet-svc/src/db/"],
      "coveragePathIgnorePatterns": ["wallet-svc/src/db/"],
      "modulePathIgnorePatterns": ["wallet-svc/src/db/"],
      "moduleFileExtensions": [
        "js",
        "json",
        "ts"
      ],
      "rootDir": "src",
      "testRegex": ".*\\.spec\\.ts$",
      "transform": {
        "^.+\\.(t|j)s$": "ts-jest"
      },
      "collectCoverageFrom": [
        "**/*.(t|j)s"
      ],
      "coverageDirectory": "../coverage",
      "testEnvironment": "node"
      }
      

      如果您注意到我提到了 3 个忽略 - “testPathIgnorePatterns”、“coveragePathIgnorePatterns”和“modulePathIgnorePatterns”。在您运行测试时会发生这种情况,文件被忽略,但是当您运行覆盖时,jest 不会忽略这些文件,您会在覆盖报告中看到它们。最好包含所有 3 个标签。

      我发现这个帖子很有帮助:https://github.com/facebook/jest/issues/1815#issuecomment-684882428

      【讨论】:

        【解决方案3】:

        我在我的package.json 中使用了这个配置,从覆盖报告中排除了index.jsreportWebVitals.js 文件。

          "jest": {
            "collectCoverageFrom": [
              "!<rootDir>/src/reportWebVitals.js",
              "!<rootDir>/src/index.js"
            ],
          }
        

        【讨论】:

          【解决方案4】:

          在大多数情况下,您会收到以下错误: 您的测试套件必须至少包含一个测试。

          要从测试中忽略/排除文件或文件夹,请修改 package.json

          如果块“jest”不存在,那么添加它:

          ...
          "jest": {
              "collectCoverage": true,
              "testPathIgnorePatterns" : [
                "__tests__/properties.js",
                "__tests__/properties.js.sample"
              ]
          },
          ...
          

          【讨论】:

          • 它实际上工作得很好。我更喜欢这个,因为我不需要添加文件夹。我注意到你必须重新启动“手表”才能使其生效的一件事。
          【解决方案5】:

          根据 Jest 文档,watchPathIgnorePatterns 应该是您想要的方式。这适用于 Jest 23.x.x 及更高版本。

          您可以将此配置添加到jest.config.jspackage.json &gt; jest

          【讨论】:

            【解决方案6】:

            我使用以下模式,它适用于我:

            collectCoverageFrom: [
                'src/**/*.js',
                '!src/api/graphql/**/*.js',
                '!src/action/**/*.js',
                '!src/utils/dev/*.js',
                '!src/**/*.e2e.js',
            ],
            

            !表示我们排除文件夹或文件。

            【讨论】:

            • 在什么文件中? package.json?您可以将其添加到您的答案中吗?
            • 在 jest.config.js 文件中
            【解决方案7】:

            可以在最新版本的 create-react-app 中使用“collectCoverageFrom”跳过测试用例报告集合中的文件,开玩笑:

            "jest": {
                "collectCoverageFrom": [
                    "src/**/*.{js,jsx,ts,tsx}",
                    "!<rootDir>/src/registerServiceWorker.js",
                    "!<rootDir>/src/serviceWorker.js",
                    "!<rootDir>/node_modules/"
                ]
            },
            

            【讨论】:

            • 在什么文件中?文件名是什么?
            • 缺少:Note: This option requires collectCoverage to be set to true or Jest to be invoked with --coverage.
            【解决方案8】:

            排除一个整个文件夹,在package.json文件的“jest”属性中添加以下内容:

            "modulePathIgnorePatterns": [
              "<rootDir>/src/services"
            ],
            

            排除一个单个文件:

            "collectCoverageFrom": [
              "!src/index.js"
            ],
            

            【讨论】:

            • 感谢,正在工作 添加正则表达式示例 "collectCoverageFrom": [ "src/**/*.{ts,js}", "!src/db_access/*.{ts,js}", "!src/**/__fixtures/.{ts,js,json}", "!src/**/__removed__/.{ts,js,json}", "!src/models/.{ts,js, json}"]
            【解决方案9】:

            当我有一个不能测试的目录时,我遇到了同样的问题,尽管我仍然希望它位于 __tests__ 目录中(例如,__mocks__)。

            在这种情况下,您不应该使用相对路径(没有斜线)。所以在你的package.json 文件中添加:

            jest: {
              "modulePathIgnorePatterns": ["__mocks__"]
            }
            

            这解决了我的问题。

            【讨论】:

              【解决方案10】:

              要从 Jest 测试中排除目录,请使用 testPathIgnorePatterns

              testPathIgnorePatterns

              "testPathIgnorePatterns": ["directory to ignore"]
              

              package.json文件中,我已配置忽略“src”目录

              {
                    "name": "learn-test",
                    "jest": {
                      "testPathIgnorePatterns": ["src"]
                    },
                    "version": "0.1.0",
                    "private": true,
                    "dependencies": {
                      "react": "^16.4.1",
                      "react-dom": "^16.4.1",
                      "react-scripts": "1.1.4"
                    },
                    "scripts": {
                      "start": "react-scripts start",
                      "build": "react-scripts build",
                      "test": "jest --watch",
                      "eject": "react-scripts eject",
              
                    },
              
                    "devDependencies": {}
                  }
              

              【讨论】:

              • "testPathIgnorePatterns": ["&lt;rootDir&gt;/cypress/"] 看这里:github.com/wallabyjs/public/issues/2245
              • 搜索 10 分钟后的最佳答案。
              • modulePathIgnorePatterns有什么区别?
              • 这个对我有用,不像 modulePathIgnorePatterns
              • 谢谢我无法让 testPathIgnorePatterns 做任何事情。
              【解决方案11】:

              您需要从文档中添加 modulePathIgnorePatterns,这是一个字符串值数组,将与之匹配

              modulePathIgnorePatterns [array] #

              (default: []) 匹配的正则表达式模式字符串数组 在考虑这些路径之前针对所有模块路径 对模块加载器“可见”。如果给定模块的路径匹配任何 在这些模式中,它在测试中不会是 require()-able 环境。这些模式字符串与完整路径匹配。采用 字符串标记以包含项目根目录的路径 目录以防止它意外忽略您的所有文件 在可能具有不同根目录的不同环境中。 示例:['/build/']。

              https://facebook.github.io/jest/docs/configuration.html#modulepathignorepatterns-array-string

              将此添加到您的配置中...

              modulePathIgnorePatterns: ["directoryNameToIgnore"]
              

              或:

              modulePathIgnorePatterns: ["<rootDir>/dist/"]
              

              【讨论】:

              • 我已经用"jest": { "modulePathIgnorePatterns": ["__tests__/results/"] }, 尝试过,但不幸的是它不起作用。
              • 你可以尝试缩短它吗? "jest": { "modulePathIgnorePatterns": ["tests"] },
              • __tests__jest 用来加载其测试的默认目录。所以重命名会很尴尬,我可以将我的results 目录移到__tests__ 之外,但除非我找不到替代品,否则我不愿意这样做。
              • 是的,您可能是对的,我只是想知道 pathName 是否因斜线而窒息。在大多数情况下,当我在 webpack 中使用排除目录时,我不包括正斜杠,而只包括“node_module”等目录的名称......
              • 真的。我刚刚尝试将目录向上移动,似乎没有任何区别。我已经确定它是其中的一个 JSON 文件,我正在修改它导致问题。试图排除它似乎仍然没有多大作用:(
              猜你喜欢
              • 2021-03-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-06-05
              • 2017-01-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多