8

我正在使用 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.js 一起使用。但是,它在这里不起作用,并且我的任何目录都没有被排除在外。

有什么办法可以做我想要完成的事情吗?

4

4 回答 4

7

根据https://karma-runner.github.io/0.12/config/configuration-file.html

**/*.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'

这似乎对我有用。

于 2015-02-11T00:48:55.430 回答
3

在 Karma 中使用 minimatch.js 库作为数学文件。所以你需要重写你的规则。例如,要排除它应该具有的文件夹节点节点

preprocessors: {
        'framework/*[!node]/*.js':'coverage',            
    }
于 2014-05-13T14:46:49.490 回答
1

我不确定您是否正在运行“istanbul cover ...”来运行覆盖率报告,但如果是,您可以使用 -x 标志来排除文件/模式。键入“istanbul help cover”将显示包括此在内的用法。

 -x <exclude-pattern> [-x <exclude-pattern>]
              one or more fileset patterns e.g. "**/vendor/**"
于 2014-05-01T15:15:29.983 回答
0

确保您要排除的目录/文件没有被任何其他包含加载。例如,'framework/ / .js':'coverage' 将加载您试图在 '!framework/node/ / .js':'coverage'中排除的文件

于 2014-04-21T15:53:43.083 回答