查找并运行覆盖以空格分隔的源文件列表的测试,这些源文件是作为参数传入的。这对于预提交钩子集成运行所需的最少数量的测试非常有用。这是在官方文档中,但是它是如何工作的呢?它分析我项目中的所有导入,并且只运行导入我想要测试的文件的测试吗?我会这样写它,但是它真的是这样工作的吗?相关问题-查找相关测试时是否使用缓存?
zkure5ic1#
最近几天我一直被同样的问题困扰着。在深入研究了Jest的源代码之后,我想我已经很清楚是怎么回事了。运行--findRelatedTests path/to/src-code.js时,Jest首先创建一个内部包jest-resolve-dependencies的示例,这是一个非常简单的类,有两个方法:resolve和resolveInverse。findRelatedTests在您提供的路径上调用resolveInverse,查找需要您的文件的每个源文件和测试文件,在我们的示例path/to/src-code.js中。此查找直接依赖于某些Jest配置,特别是roots和/或rootDir,以帮助解析路径。如果找到的文件是一个测试文件,Jest就会运行它,这很简单;如果找到的文件是一个源文件,就将其命名为found-file.js,那么任何导入found-file.js的测试文件以及导入任何源文件(这些源文件本身导入found-file.js)的测试文件都会运行。这是一个聪明的实现,正如维护者所说,是一个“传递反向依赖”的解析器,你可以在这个while循环中看到。
--findRelatedTests path/to/src-code.js
jest-resolve-dependencies
resolve
resolveInverse
findRelatedTests
path/to/src-code.js
roots
rootDir
found-file.js
while
1条答案
按热度按时间zkure5ic1#
最近几天我一直被同样的问题困扰着。在深入研究了Jest的源代码之后,我想我已经很清楚是怎么回事了。
运行
--findRelatedTests path/to/src-code.js
时,Jest首先创建一个内部包jest-resolve-dependencies
的示例,这是一个非常简单的类,有两个方法:resolve
和resolveInverse
。findRelatedTests
在您提供的路径上调用resolveInverse
,查找需要您的文件的每个源文件和测试文件,在我们的示例path/to/src-code.js
中。此查找直接依赖于某些Jest配置,特别是roots
和/或rootDir
,以帮助解析路径。如果找到的文件是一个测试文件,Jest就会运行它,这很简单;如果找到的文件是一个源文件,就将其命名为
found-file.js
,那么任何导入found-file.js
的测试文件以及导入任何源文件(这些源文件本身导入found-file.js
)的测试文件都会运行。这是一个聪明的实现,正如维护者所说,是一个“传递反向依赖”的解析器,你可以在这个
while
循环中看到。