使用Karma和Istanbul时从coverage中排除文件

时间:2014-03-19 21:31:35

标签: javascript node.js karma-runner istanbul minmatch

我正在使用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'
    }

正如您所看到的,我正在尝试使用"!"作为negate命令,通常与Node一起使用。但是,它不能在这里工作,我的目录都没有被排除。

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

4 个答案:

答案 0 :(得分: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'
}

这似乎已经完成了你正在寻找的东西。

作为对来到这里寻找如何定位所有文件EXCEPT .spec.js文件的其他人的说明,请尝试:

'**/!(*spec).js'

这似乎对我有用。

答案 1 :(得分:3)

在Karma中使用minimatch.js lib来匹配文件。 所以你需要重写规则。 例如,要排除文件夹节点节点,它应具有

preprocessors: {
        'framework/*[!node]/*.js':'coverage',            
    }

答案 2 :(得分:1)

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

 -x <exclude-pattern> [-x <exclude-pattern>]
              one or more fileset patterns e.g. "**/vendor/**"

答案 3 :(得分:0)

确保您要排除的目录/文件未被任何其他包含加载。例如,&#39; framework / / .js&#39;:&#39; coverage&#39;将加载您要在&#39;!framework / node / / .js&#39;:&#39; coverage&#39;