Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

incremental-coverage

Package Overview
Dependencies
Maintainers
2
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

incremental-coverage

![](https://img.shields.io/github/license/matmanjs/incremental-coverage) ![](https://img.shields.io/github/languages/code-size/matmanjs/incremental-coverage)

  • 2.3.2
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
121
decreased by-47.16%
Maintainers
2
Weekly downloads
 
Created
Source

Incremental Coverage

本应用结合 lcov.infoGit Diff 得到仓库的增量覆盖率数据。

  • 快速开始-快速得到一份测试报告
  • API-介绍暴露出来的 API 与配置选项

Incremental Coverage 适用于 macOS、Windows 和 Linux。

如果 Incremental Coverage 不能正常工作,请提交 issue

Quick Start

安装

可以通过 NPM 或者 Yarn 进行安装。

$ npm install -g incremental-coverage
# or
$ yarn add global incremental-coverage

使用

我们通过一个简单的命令行工具来展示如何使用(必须在 Git 仓库根目录中运行,且指定 lcov 文件)。

$ incremental-coverage -p="./.dwt_output/e2e/coverage/lcov.info" -t="2020-06-01"
  • 上面这条命令指定 ./.dwt_output/e2e/coverage/lcov.info 覆盖率文件
  • 并且指定了 2020-06-01 增量起始时间
  • 运行这个命令将会在根目录输出一个 output.json 文件,文件示例如下:
{
  "data": {
    "total": { "increLine": 3, "covLine": 3, "increRate": "100.00%" },
    "files": [
      {
        "increLine": 1,
        "covLine": 1,
        "increRate": "100.00%",
        "detail": [{ "number": 2, "hits": 73 }],
        "name": "./src/components/index.js"
      }
    ]
  },
  "commit": {
    "status": ["M"],
    "files": [".gitlab-ci.yml"],
    "abbrevHash": "26e3b93",
    "hash": "26e3b931cf165b73902e404d3adaaef973ac4609",
    "subject": "refactor: 临时注释tde的调试代码",
    "authorName": "linjianghe",
    "authorDate": "2020-07-31 09:55:35 +0800"
  },
  "createInfo": {
    "hash": "cc4f1e2f18a49cd8a30de0cb5087a709979c4631",
    "abbrevHash": "cc4f1e2",
    "authorName": "linjianghe",
    "authorEmail": "linjianghe@tencent.com",
    "authorDate": "Mon Apr 1 14:43:54 2019 +0800",
    "subject": "feat: init"
  }
}

  • datatotal 为增量覆盖率的总情况,files 中是各个文件的详细情况
  • commit 为当前正在对比的那次提交的信息
  • createInfo 是 git 仓库的创建信息

API

提供 命令行Node.js 调用两种形式

命令行

CLI 没有子命令只有最简单的三个选项:

  • --path、-p:指定 lcov.info 文件的路径
  • --time、-t:执行增量计算的开始时间(建议不要太长)
  • --output、-o:结果的输出方式,可以选择 file 与 stdio,默认为 file

API

Incremental Coverage 对外暴露两个 API 与三个 Parser

getIncrease
params
  • pathstring 或者 string[],lcov.info 文件的路径
  • opts:配置选项
    • cwdString,git 命令运行的路径
    • sinceString,增量起始计算时间
    • outputBoolean,是否需要输出
    • streamObject,针对输出流的配置
      • name:file 或者 stdio
      • opts:包含 type 输出格式,可选 jsonyamlfilePath(name 为 file 时生效)指定输出文件路径;ioType(name 为 stdio 时生效),可选 stdout、stderr
return

格式化后的数据,与上面的示例文件保持一致

lcovConcat
params
  • ...args: string[]:lcov.info 文件路径
return

合并之后的数据

example
console.log(lcovParser(lcov1, lcov2));
DiffParser
export declare class DiffParser implements Parser {
  constructor(hash: string, opt?: child.ExecOptions);
  run(): Promise<File[]>;
}
  • hash:需要进行 Diff 的 Commit ID
  • opt:与子进程接受的参数相同可以 参考
  • File:本数据结构如下(使用 gitdiff-parser
export interface Change {
  content: string;
  type: 'insert' | 'delete' | 'normal';
  isInsert?: boolean;
  isDelete?: boolean;
  isNormal?: boolean;
  lineNumber?: number;
  oldLineNumber?: number;
  newLineNumber?: number;
}

export interface Hunk {
  content: string;
  oldStart: number;
  newStart: number;
  oldLines: number;
  newLines: number;
  changes: Change[];
}

export interface File {
  hunks: Hunk[];
  oldEndingNewLine: boolean;
  newEndingNewLine: boolean;
  oldMode: string;
  newMode: string;
  similarity?: number;
  oldRevision: string;
  newRevision: string;
  oldPath: string;
  newPath: string;
  isBinary?: boolean;
  type: 'add' | 'delete' | 'modify' | 'rename';
}
LogParser
export declare class LogParser implements Parser {
  constructor(opt?: GitlogOptions);
  run(): Promise<
    (Record<'abbrevHash' | 'hash' | 'subject' | 'authorName' | 'authorDate' | 'status', string> & {
      files: string[];
    })[]
  >;
}
  • opt 以及返回数据都可以 参考
LcovParser
export declare class LcovParser implements Parser {
  constructor(path: string);
  run(): Promise<Info>;
}
  • path:lcov 文件的路径
  • Info:格式化之后的数据,如下
// 覆盖率测试报告格式化数据结构
export interface Total {
  linesCovered: number;
  linesValid: number;
}

export interface DetailLines {
  lineRate: number;
  lines: {
    branch: string;
    hits: number;
    number: string;
  }[];
}

export interface Lcov {
  detail: Record<string, DetailLines>;
  $?: Total;
}

License

Incremental Coverage 使用 MIT 开源协议

FAQs

Package last updated on 19 Aug 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc