Jest 是一个非常流行的 JavaScript 测试框架,它提供了一个 Watch Mode,可以在你修改代码时自动运行测试。但是,有时候 Watch Mode 会出现一些问题,比如测试不会自动运行,或者运行的测试数量不正确。这篇文章将介绍一些常见的 Watch Mode 失灵问题,并提供解决方案。
问题 1:测试不会自动运行
这是 Watch Mode 最常见的问题之一。如果你修改了代码,但是测试没有自动运行,那么你需要检查一下以下几个方面:
方案 1:检查 Jest 配置文件
首先,你需要检查 Jest 配置文件是否正确配置了 Watch Mode。在 Jest 配置文件中,需要将 watch
属性设置为 true
,例如:
module.exports = { // ... watch: true, // ... };
方案 2:检查测试文件和源代码文件的路径
如果你修改了源代码文件,但是测试没有自动运行,那么你需要检查一下测试文件和源代码文件的路径是否正确。Jest 默认会监视与测试文件同一目录下的所有文件,如果你的测试文件和源代码文件不在同一目录下,需要在 Jest 配置文件中设置 roots
属性,例如:
module.exports = { // ... roots: ["<rootDir>/src"], // ... };
这里的 <rootDir>
表示项目根目录的路径。
方案 3:检查文件名和文件后缀
如果你修改了文件名或文件后缀,但是测试没有自动运行,那么你需要检查一下文件名和文件后缀是否正确。Jest 默认只监视 .js
、.jsx
、.ts
和 .tsx
文件,如果你使用了其他文件后缀,需要在 Jest 配置文件中设置 moduleFileExtensions
属性,例如:
module.exports = { // ... moduleFileExtensions: ["js", "jsx", "ts", "tsx", "json", "node"], // ... };
这里的 moduleFileExtensions
表示要监视的文件后缀名数组。
问题 2:运行的测试数量不正确
有时候,Watch Mode 会运行错误的测试或者不运行某些测试。如果你遇到了这种情况,可以尝试以下解决方案:
方案 1:检查测试文件的命名规则
Jest 默认会运行所有以 .test.js
或 .spec.js
结尾的文件中的测试。如果你使用了其他命名规则,需要在 Jest 配置文件中设置 testMatch
属性,例如:
module.exports = { // ... testMatch: ["**/__tests__/**/*.[jt]s?(x)", "**/?(*.)+(spec|test).[jt]s?(x)"], // ... };
这里的 testMatch
表示要运行的测试文件的匹配规则。
方案 2:检查测试文件的路径
如果你的测试文件不在默认的 __tests__
目录下,需要在 Jest 配置文件中设置 testPathIgnorePatterns
属性,例如:
module.exports = { // ... testPathIgnorePatterns: ["<rootDir>/node_modules/", "<rootDir>/build/"], // ... };
这里的 testPathIgnorePatterns
表示要忽略的测试文件路径。
方案 3:检查测试文件的标记
如果你不想运行某些测试,可以在测试文件中使用 test.skip
或 test.todo
标记。如果你使用了这些标记,需要在 Jest 配置文件中设置 testPathIgnorePatterns
属性,例如:
module.exports = { // ... testPathIgnorePatterns: ["<rootDir>/node_modules/", "<rootDir>/build/", ".skip.test.js", ".todo.test.js"], // ... };
这里的 .skip.test.js
和 .todo.test.js
表示要忽略的测试文件。
结论
Jest Watch Mode 是一个非常有用的功能,可以让你在开发过程中快速运行测试。但是,有时候 Watch Mode 会出现一些问题,需要我们进行调试和解决。本文介绍了一些常见的 Watch Mode 失灵问题,并提供了解决方案。希望这些解决方案能够帮助你更好地使用 Jest Watch Mode。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6755307c1b963fe9cc528d4a