对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 相关文章推荐
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
Jan 12 Javascript
JavaScript中输出标签的方法
Aug 27 Javascript
Javascript保存网页为图片借助于html2canvas库实现
Sep 05 Javascript
JS实现OCX控件的事件响应示例
Sep 17 Javascript
node.js中的events.emitter.removeListener方法使用说明
Dec 10 Javascript
jQuery中eq()方法用法实例
Jan 05 Javascript
JavaScript编写推箱子游戏
Jul 07 Javascript
js获取新浪天气接口的实现代码
Jun 06 Javascript
最全的JavaScript开发工具列表 总有一款适合你
Jun 29 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
Aug 22 Javascript
ES6中Promise的使用方法实例总结
Feb 18 Javascript
vue中div禁止点击事件的实现
Apr 02 Vue.js
基于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
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
详解HTTP Cookie状态管理机制
2016/01/14 PHP
PHP屏蔽关键字实现方法
2016/11/17 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
ASP中进行HTML数据及JS数据编码函数
2009/11/11 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
悬浮广告方法日常收集整理
2016/03/18 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
JS将unicode码转中文方法
2017/05/08 Javascript
node跨域请求方法小结
2017/08/25 Javascript
vue使用drag与drop实现拖拽的示例代码
2017/09/07 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
Python基础之函数用法实例详解
2014/09/10 Python
Python 类与元类的深度挖掘 II【经验】
2016/05/06 Python
python中字符串变二维数组的实例讲解
2018/04/03 Python
Python中的单继承与多继承实例分析
2018/05/10 Python
使用python搭建服务器并实现Android端与之通信的方法
2019/06/28 Python
html5 自定义播放器核心代码
2013/12/20 HTML / CSS
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
allbeauty美国:英国在线美容店
2019/03/11 全球购物
eBay奥地利站:eBay.at
2019/07/24 全球购物
EMPHASIS艾斐诗官网:周生生旗下原创精品珠宝品牌
2020/12/17 全球购物
警察思想汇报
2014/01/04 职场文书
普通大学毕业生自荐信范文
2014/02/23 职场文书
2014年底工作总结
2014/12/15 职场文书
妈妈再爱我一次观后感
2015/06/08 职场文书
2015年国庆节广播稿
2015/08/19 职场文书
手把手教你导入Go语言第三方库
2021/08/04 Golang