如何使用 Jest testPathIgnorePatterns(React、Jest、Regex)忽略文件名约定

Posted

技术标签:

【中文标题】如何使用 Jest testPathIgnorePatterns(React、Jest、Regex)忽略文件名约定【英文标题】:How to ignore filename convention with Jest testPathIgnorePatterns (React, Jest, Regex) 【发布时间】:2020-04-03 23:55:56 【问题描述】:

我试图建立一个约定来忽略任何遵循模式的测试。如果你想在 npm 测试期间忽略它,文件名看起来像这样。

DISABLED.MyComponent.test.js

尝试使用 testPathIgnorePatterns

testPathIgnorePatterns: ['<rootDir>/src/**/DISABLED.*.js'],

错误是它仍在运行,或者抛出正则表达式无效的错误。

【问题讨论】:

顾名思义,此属性仅用于忽略路径 @Teneff 对使用不同的属性有何建议? 【参考方案1】:

testPathIgnorePatterns 是一个正则表达式模式数组,它忽略与列出的表达式匹配的任何 路径,并且还应包含默认的 "/node_modules/"。虽然不打算这样做,但您也可以使用 testPathIgnorePatterns 来排除特定文件:

因此,您最好的选择是将忽略的测试移动到单独的文件夹中,例如

"jest": 
  "testPathIgnorePatterns": [
    "/node_modules/",
    "<rootDir>/ignore/this/path/" 
  ]

【讨论】:

谢谢,这很有道理,但不太适合我的用例。不过我会记住的。真的希望我可以根据某种命名约定禁用,但这将是我的备用计划。 我不确定您所说的“它不会帮助您忽略特定文件”是什么意思。 testPathIgnorePatterns 考虑完整路径包括文件名。 @rinogo 我也不确定。这已经有一段时间。我想我删除那句话,因为它具有误导性。谢谢。【参考方案2】:

Jest 使用glob patterns 来匹配测试文件,因此在the testMatch configuration 中的默认条目前面加上!(DISABLED.) 就可以了。

package.json

  // ... rest of the package
  "jest": 
    "testMatch": [
      "**/__tests__/**/!(DISABLED.)*.[jt]s?(x)",
      "**/!(DISABLED.)?(*.)+(spec|test).[tj]s?(x)"
    ]
  


旁注:您还可以通过将主 describe 块重命名为 xdescribedescribe.skip 来“禁用”测试文件,这样可以显示有跳过的测试而不是完全忽略文件

Test Suites: 1 skipped, 11 passed, 11 of 12 total
Tests:       2 skipped, 112 passed, 114 total

【讨论】:

禁用语法仍然不适用于这些 glob,但我更喜欢你的旁注,可见性很重要。谢谢@Teneff【参考方案3】:

这里的其他答案很有帮助,但错过了核心事实:

testPathIgnorePatterns 可以用于忽略您的文件名。问题是 testPathIgnorePatterns takes a RegExp,而不是您指定的 glob。

testPathIgnorePatterns 的默认设置是 "/node_modules/",因此包含它可能也很有用。

例如,要忽略具有“e2e-”前缀的端到端测试,您可以使用:

"testPathIgnorePatterns": [
    "/node_modules/",
    "/e2e-"
]

在您的具体情况下,这将类似于以下内容(注意./DISABLED\. 中是如何转义的):

"testPathIgnorePatterns": [
    "/node_modules/",
    "/DISABLED\."
]

【讨论】:

以上是关于如何使用 Jest testPathIgnorePatterns(React、Jest、Regex)忽略文件名约定的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Jest testPathIgnorePatterns(React、Jest、Regex)忽略文件名约定

如何使用 jest.fn() 模拟属性

使用 jest.mock('axios') 时如何模拟拦截器?

如何使用 Jest 监视方法调用?

如何使用 Jest 测试 Reflux 动作

jest.fn() 做啥以及如何使用它?