Javascript 使用Karma和Istanbul时将文件排除在覆盖范围之外
我正在使用Karma测试我的JavaScript并获取覆盖率报告。我使用的是默认的伊斯坦布尔报道。这是我的预处理器参数:Javascript 使用Karma和Istanbul时将文件排除在覆盖范围之外,javascript,node.js,karma-runner,istanbul,minmatch,Javascript,Node.js,Karma Runner,Istanbul,Minmatch,我正在使用Karma测试我的JavaScript并获取覆盖率报告。我使用的是默认的伊斯坦布尔报道。这是我的预处理器参数: preprocessors: { 'framework/**/*.js':'coverage', 'framework/*.js':'coverage', '!framework/node/**/*.js':'coverage', '!framework/test
preprocessors: {
'framework/**/*.js':'coverage',
'framework/*.js':'coverage',
'!framework/node/**/*.js':'coverage',
'!framework/test/**/*.js':'coverage',
'framework-lib/**/*.js':'coverage',
'!framework-lib/tool-data-api/tool-data-api.js':'coverage'
}
如您所见,我尝试使用“!”作为否定命令,它通常与Node一起工作。但是,它在这里不起作用,我的任何目录都没有被排除在外
有什么方法可以完成我要完成的任务吗?确保要排除的目录/文件没有被任何其他包含加载。例如,“framework//.js”:“coverage”将加载您试图在“”中排除的文件!framework/node//.js':“coverage”我不确定您是否正在运行“伊斯坦布尔cover…”来运行覆盖率报告,但如果是,您可以使用-x标志来排除文件/模式。键入“伊斯坦布尔帮助封面”将向您显示包括此内容在内的用法
-x <exclude-pattern> [-x <exclude-pattern>]
one or more fileset patterns e.g. "**/vendor/**"
-x[-x]
一个或多个文件集模式,例如“**/vendor/**”
在Karma中,使用minimatch.js库匹配文件。
所以你需要重写你的规则。
例如,要排除它应该具有的文件夹节点
preprocessors: {
'framework/*[!node]/*.js':'coverage',
}
根据:
**/*.js:所有子目录中具有“js”扩展名的所有文件**/!(jquery.js:与前面相同,但不包括“jquery.js”
**/(foo | bar).js:在所有子目录中,所有“foo.js”或“bar.js”文件 因此,基于此,我尝试了以下方法:
preprocessors: {
'framework/**/!(node|test)/*.js': 'coverage',
'framework-lib/**/!(tool-data-api).js': 'coverage'
}
这似乎已经完成了你想要的
请注意,其他来这里寻找如何定位除.spec.js文件以外的所有文件的人,请尝试:
'**/!(*spec).js'
这似乎对我有用。只是不要写你不想被覆盖的模式/文件。或者,如果您需要对其进行预处理,只需在列表中不将
coverage
作为预处理器写入即可(对于每个文件,您可以指定一个字符串或字符串列表)。如果您想使用
要排除它无法工作的路径:请参阅此问题:那么如何从目录中获取除*spec.js
文件之外的所有文件?minimatch.js使用extglob语法,这是我迄今为止见过的最奇怪的beast:如何忽略任何节点/模块文件夹?