使用Node.js来生成覆盖率报告

在现场,有一种随意地使用Istanbul来搭建CI环境的情况,但是却出现了Node.js的拓展语法导致严重错误的情况发生。。。

为什么?为什么?

This package has been deprecated
Author message:

This module is no longer maintained, try this instead: npm i nyc Visit https://istanbul.js.org/integrations for other alternatives.

噢,原来如此。(我会阅读官方说明。对不起。)

因为是个好机会,所以我想用纽约市来进行正确的输出试试看。

让我们创造一个环境。

由于我不用Docker就无法入眠,所以我打算尝试使用Docker来构建。

# 適当に
$ mkdir CoverageNodejs

# Create Dockerfile
$ mkdir docker
$ touch docker/Dockerfile

请在Dockerfile中编写内容。版本可以选择稳定版。
* 根据每个项目的具体情况自行决定内容。

FROM node:12.18.1

WORKDIR /src

ENV TZ Asia/Tokyo

CMD ["sh"]

docker-compose也可以。

$ touch docker-compose.yml
version: '3'

services:
  coverage_nodejs:
    container_name: coverage_nodejs
    build: docker/.
    volumes: 
      - ./src:/src

暂时只需要源目录。

$ mkdir src
$ touch src/index.js
'use strict'

const execute = () => new Promise((resolve, reject) => {
  Promise.resolve()
    .then(() => {
      resolve('yamachita')
    })
    .catch(reject)
})

module.exports = {
  execute
}

在Docker中。

$ docker-compose up -d --build
$ docker-compose run --rm coverage_nodejs npm init

我首先安装了我在Node.js中使用的CI/CD库。

# 静的解析
# @see https://www.npmjs.com/package/standard
$ docker-compose run --rm coverage_nodejs npm install -D standard

# テスティングライブラリ
# @see https://www.npmjs.com/package/mocha
$ docker-compose run --rm coverage_nodejs npm install -D mocha

# カバレッジレポート
# @see https://www.npmjs.com/package/nyc
$ docker-compose run --rm coverage_nodejs npm install -D nyc

我们来实际进行测试吧。

创建一个合适的测试文件夹。

$ mkdir src/test
$ touch src/test/index.test.js
/* eslint-disable no-undef */
const usecase = require('../index')
const assert = require('assert')

describe('# index', () => {
  it('## execute', async () => {
    let res
    await usecase.execute().then((result) => { res = result })
    assert.strictEqual(res, 'yamashita')
  })
})

写测试脚本。

〜省略〜
  "scripts": {
    "test": "mocha --recursive",
    "test-coverage": "standard && nyc --reporter=html --reporter=text mocha --recursive"
  },
〜省略〜

进行测试

$ docker-compose run --rm coverage_nodejs npm test
> src@1.0.0 test /src
> mocha --recursive



  # index
    1) ## execute


  0 passing (13ms)
  1 failing

  1) # index
       ## execute:

      AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
+ actual - expected

+ 'yamachita'
- 'yamashita'
       ^
      + expected - actual

      -yamachita
      +yamashita

      at Context.<anonymous> (test/index.test.js:8:12)



npm ERR! Test failed.  See above for more details.

啊,我错过了测试用例。
我要修正并重新尝试一次。

$ docker-compose run --rm coverage_nodejs npm test

> src@1.0.0 test /src
> mocha --recursive



  # index
    ✓ ## execute


  1 passing (10ms)

下一步是生成报告覆盖率。

$ docker-compose run --rm coverage_nodejs npm run test-coverage

> src@1.0.0 test-coverage /src
> standard && nyc --reporter=html --reporter=text mocha --recursive



  # index
    ✓ ## execute


  1 passing (14ms)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |     100 |      100 |     100 |     100 |                   
 index.js |     100 |      100 |     100 |     100 |                   
----------|---------|----------|---------|---------|-------------------

# カバレッジレポートを開く
$ open src/coverage/index.html 

这种感觉。

スクリーンショット 2020-06-29 22.39.06.png

总结

在我目前的工作场所,我将这份覆盖报告放在内部专用服务器上的Express(Node.js)上,每天早上执行并将执行结果通知到Slack上。
如果有时间的话,希望也能在文章中介绍一下这个环境。

本次的Git项目

广告
将在 10 秒后关闭
bannerAds