对TypeScript库进行单元测试的方法


Posted in Javascript onJuly 18, 2019
原文发布于2017年7月,为保证能正常运行,其中部分命令进行了调整。

当时TypeScript版本为2.x,但依旧具有借鉴意义。

单元测试能限制你库中Bug的「生长」。随着编写的库越来越大,你不能总是手工测试每个特性。但你可以使用单元测试来测试每个特性,并且编写起来并不难。下面展示如何在Typescript中设置单元测试!

步骤1:安装用于单元测试的包

单元测试assert(推断)代码中一些属性。例如你有一个方法add(x,y),其应该正确地将xy相加,通过单元测试你可以进行如下测试assert(add(3,4)).equals(7)

一些用于单元测试的库提供了好用的assert方法来执行测试。我们这里使用了Mocha和Chai,通过如下命令进行安装:

npm i mocha @types/mocha chai @types/chai ts-node typescript --save-dev

步骤2:编写第一个单元测试

假设你有以下单元:

typescript-library/src/math.ts

export function add(x: number, y: number) {
 return x + y;
}

那对应的单元测试可能是这样的:

typescript-library/src/math.test.ts

import { add } from './math';

import * as mocha from 'mocha';
import * as chai from 'chai';

const expect = chai.expect;
describe('My math library', () => {

 it('should be able to add things correctly' , () => {
  expect(add(3,4)).to.equal(7);
 });

});

步骤3:运行单元测试

您可以使用以下命令运行测试:

./node_modules/mocha/bin/mocha --reporter spec --require ts-node/register src/**/*.test.ts

然后应该会在控制台中看到一个输出,如下所示:

对TypeScript库进行单元测试的方法

您可以将这个长命令放入package.json中转换成"scripts:{"test":"…"}"然后用npm test运行测试。也就是说此时的package.json应该是:

{
 "devDependencies": {
  "@types/chai": "^4.1.7",
  "@types/mocha": "^5.2.7",
  "chai": "^4.2.0",
  "ts-node": "^8.3.0",
  "mocha": "^6.1.4"
 },
 "scripts": {
  "test": "./node_modules/mocha/bin/mocha --reporter spec --require ts-node/register src/**/*.test.ts"
 }
}

如果您想运行单独的某个单元测试,可以用./node_modules/mocha/bin/mocha --reporter spec --grep "TestName" --require ts-node/register src/**/*.test.ts。“TestName”可以是任何的describe值,在本例中就如./node_modules/mocha/bin/mocha --reporter spec --grep "My math library" --require ts-node/register test/**/*.test.ts

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
使用按钮控制以何种方式打开新窗口的属性介绍
Dec 17 Javascript
js showModalDialog 弹出对话框的简单实例(子窗体)
Jan 07 Javascript
javascript三元运算符用法实例
Apr 16 Javascript
JS 在数组指定位置插入/删除数据的方法
Jan 12 Javascript
Vue.js在使用中的一些注意知识点
Apr 29 Javascript
Node接收电子邮件的实例代码
Jul 21 Javascript
JavaScript引用类型Date常见用法实例分析
Aug 08 Javascript
JavaScript 2018 中即将迎来的新功能
Sep 21 Javascript
vue router 组件的高级应用实例代码
Apr 08 Javascript
vue-cli3添加模式配置多环境变量的方法
Jun 05 Javascript
jQuery实现滑动星星评分效果(每日分享)
Nov 13 jQuery
基于Element封装一个表格组件tableList的使用方法
Jun 29 Javascript
基于JS实现数字动态变化显示效果附源码
Jul 18 #Javascript
微信小程序实现拍照画布指定区域生成图片
Jul 18 #Javascript
vue使用video.js进行视频播放功能
Jul 18 #Javascript
百度小程序之间的页面通信过程详解
Jul 18 #Javascript
微信小程序如何获取群聊的openGid以及名称详解
Jul 17 #Javascript
vue+django实现一对一聊天功能的实例代码
Jul 17 #Javascript
微信小程序从注册账号到上架(图文详解)
Jul 17 #Javascript
You might like
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
PHP 设计模式之观察者模式介绍
2012/02/22 PHP
PHP PDOStatement::debugDumpParams讲解
2019/01/30 PHP
js loading加载效果实现代码
2009/11/24 Javascript
jquery select(列表)的操作(取值/赋值)
2011/03/16 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
2017/10/09 Javascript
微信小程序实现弹出菜单功能
2018/06/12 Javascript
JS实现百度网盘任意文件强制下载功能
2018/08/31 Javascript
jQuery属性选择器用法实例分析
2019/06/28 jQuery
jQuery表单校验插件validator使用方法详解
2020/02/18 jQuery
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
[00:52]黑暗之门更新 新英雄孽主驾临DOTA2
2016/08/24 DOTA
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
[41:21]夜魇凡尔赛茶话会 第三期02:看图识人
2021/03/11 DOTA
python通过线程实现定时器timer的方法
2015/03/16 Python
python基础教程之Filter使用方法
2017/01/17 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
python中requests和https使用简单示例
2018/01/18 Python
Python3.4实现远程控制电脑开关机
2018/02/22 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
2019/01/11 Python
Python脚本按照当前日期创建多级目录
2019/03/01 Python
Linux上使用Python统计每天的键盘输入次数
2019/04/17 Python
Python3中列表list合并的四种方法
2019/04/19 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
python中entry用法讲解
2020/12/04 Python
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
高中社区服务活动报告
2015/02/05 职场文书
春风化雨观后感
2015/06/11 职场文书
初中美术教学反思
2016/02/17 职场文书
导游词之蜀山胜景瓦屋山
2019/11/29 职场文书
Redis三种集群模式详解
2021/10/05 Redis
python可视化大屏库big_screen示例详解
2021/11/23 Python