Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Karma和Istanbul时将文件排除在覆盖范围之外_Javascript_Node.js_Karma Runner_Istanbul_Minmatch - Fatal编程技术网

Javascript 使用Karma和Istanbul时将文件排除在覆盖范围之外

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

我正在使用Karma测试我的JavaScript并获取覆盖率报告。我使用的是默认的伊斯坦布尔报道。这是我的预处理器参数:

    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:如何忽略任何节点/模块文件夹?