使用Mocha、Istanbul和Chai实现TypeScript单元测试和覆盖率

本文主要描述使用Mocha、Istanbul和Chai实现TypeScript单元测试和覆盖率的方法和过程,并简单记录SonarQube的相关配置。

Github: https://github.com/prufeng/tsexpress

关于JavaScript的单元测试和覆盖率,可参考:使用Mocha和Istanbul实现Node.js单元测试和覆盖率

Install

安装相关module和types。
Mocha是基本单元测试工具。
nyc用来统计代码覆盖率。
Chai则主要用来测试HTTP request。

npm i -D mocha
npm i -D nyc
npm i -D chai
npm i -D chai-http
npm i -D source-map-support

npm i -D @types/mocha
npm i -D @types/chai
npm i -D @types/chai-http

Mocha

mocha.opts

创建test/mocha.opts,配置如下。

--require ts-node/register
--require source-map-support/register
--recursive
--full-trace
--bail
test/**/*.spec.ts

app.spec.ts

创建test/app.spec.ts,添加以下test case测试当前的几个RESTful API。

import chai from 'chai';
import chaiHttp from 'chai-http';
import server from '../src/server';

let should = chai.should();
chai.use(chaiHttp);

describe('App Unit Test', () => {
    it('should get status 200', (done) => {
        chai.request(server)
            .get('/')
            .end((err, res) => {
                res.should.have.status(200);
                done();
            });
    });
    it('should get user list', (done) => {
        chai.request(server)
            .get('/users')
            .end((err, res) => {
                res.should.have.status(200);
                res.text.should.eql('respond with the user list here');
                done();
            });
    });
    it('should get status 404', (done) => {
        chai.request(server)
            .get('/wrongUrl2018')
            .end((err, res) => {
                res.should.have.status(404);
                // res.text.should.eql('respond with the user list here');
                done();
            });
    });
});

Unit Test

运行mocha命令,测试通过的结果如下。

mocha

  App Unit Test
GET / 200 13.293 ms - 198
    √ should get status 200
GET /users 200 0.662 ms - 31
    √ should get user list
GET /wrongUrl2018 404 7.099 ms - 1339
    √ should get status 404


  3 passing (55ms)

Istanbul(nyc)

package.json

修改package.json,增加nyc相关配置。
includeextesion包含需要测试的source code,reporter指明需要生成的report,缺省为text。

  "scripts": {
    "start": "npm run serve",
    "serve": "node dist/out-tsc/server",
    "test": "nyc mocha",
    "build":"tsc -p tsconfig.json"
  },
  "nyc": {
    "include": [
      "src/**/*.ts",
      "src/**/*.tsx"
    ],
    "exclude": [
      "**/*.d.ts"
    ],
    "extension": [
      ".ts",
      ".tsx"
    ],
    "require": [
      "ts-node/register"
    ],
    "reporter": [
      "text",
      "html"
    ],
    "sourceMap": true,
    "instrument": true,
    "all": true
  },

npm test

npm test实际上是运行nyc mocha,但直接运行nyc mocha得不到正确的结果,因为无法加载package.json里的nyc配置。
成功运行后参考结果如下。

--------------------|----------|----------|----------|----------|-------------------|
File                |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
--------------------|----------|----------|----------|----------|-------------------|
All files           |    79.03 |    36.84 |    85.71 |    79.03 |                   |
 src                |       74 |    33.33 |    66.67 |       74 |                   |
  app.ts            |      100 |      100 |      100 |      100 |                   |
  server.ts         |    56.67 |    33.33 |    66.67 |    56.67 |... 70,72,73,74,76 |
 src/app/common     |      100 |       50 |      100 |      100 |                   |
  errHandler.ts     |      100 |       50 |      100 |      100 |               7,9 |
 src/app/demo       |      100 |      100 |      100 |      100 |                   |
  homeController.ts |      100 |      100 |      100 |      100 |                   |
  userController.ts |      100 |      100 |      100 |      100 |                   |
--------------------|----------|----------|----------|----------|-------------------|

如果生成了html report,可在coverage目录下打开index.html。html report的好处是可以点击查看每个文件的具体测试覆盖详情。
在这里插入图片描述

SonarQube

Install SonarQube Plugin - SonarTS

https://docs.sonarqube.org/display/PLUG/SonarTS

sonar.properties

sonar.javascript.lcov.reportPaths=coverage/lcov.info
sonar.typescript.lcov.reportPaths=coverage/lcov.info

(Works without sonar.typescript.lcov.reportPaths configure from my test. )

Reference

https://istanbul.js.org/docs/tutorials/typescript/

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端开发规范和单元测试是前端开发过程中非常重要的两个方面。前端开发规范是指在前端开发过程中,制定一些标准和规则,使得团队成员能够按照相同的标准进行开发,从而提高代码的质量和可维护性。单元测试是指对代码中的每个单元进行测试,以确保代码的正确性和稳定性。 前端开发规范包括以下内容: 1.代码风格:制定一套统一的代码风格,包括缩进、空格、命名等方面。 2.文件管理:制定一套文件管理规范,包括文件命名、目录结构等方面。 3.注释规范:制定一套注释规范,包括注释的位置、格式等方面。 4.代码复用:制定一套代码复用规范,包括如何写可复用代码的方式。 5.错误处理:制定一套错误处理规范,包括如何处理异常、错误等方面。 单元测试包括以下内容: 1.单元测试框架:选择一种适合自己的单元测试框架,如Jest、Mocha等。 2.测试用例编写:编写测试用例,覆盖代码中的每个单元。 3.测试用例执行:运行测试用例,检查代码是否符合预期结果。 4.测试覆盖率:分析测试覆盖率,检查测试用例的覆盖率是否足够。 通过制定前端开发规范和进行单元测试,可以提高代码的质量和可维护性,避免一些常见的错误和问题。同时,也可以提高代码的可测试性和可维护性,为代码的后续开发和维护提供保障。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值