对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 相关文章推荐
轻松学习jQuery插件EasyUI EasyUI创建RSS Feed阅读器
Nov 30 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
Dec 04 Javascript
jQuery的promise与deferred对象在异步回调中的作用
May 03 Javascript
jquery选择器中的空格与大于号>、加号+与波浪号~的区别介绍
Jun 24 Javascript
基于JS模仿windows文件按名称排序效果
Jun 29 Javascript
jQuery fadeOut 异步实例代码详解
Aug 18 Javascript
jQuery简单自定义图片轮播插件及用法示例
Nov 21 Javascript
jquery对象与DOM对象转化
Feb 08 Javascript
详细介绍RxJS在Angular中的应用
Sep 23 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
Oct 31 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
May 28 Javascript
Javascript之datagrid查询详解
Sep 15 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
漫荒推荐:画风超赞的国风漫画推荐 超长假期不无聊
2020/03/08 国漫
检查php文件中是否含有bom的函数
2012/05/31 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
php实现倒计时效果
2015/12/19 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
Yii框架批量插入数据扩展类的简单实现方法
2017/05/23 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
在网页中控制wmplayer播放器
2006/07/01 Javascript
JavaScript 事件属性绑定带参数的函数
2009/03/13 Javascript
jQuery 使用手册(二)
2009/09/23 Javascript
JSQL 批量图片切换的实现代码
2010/05/05 Javascript
JavaScript对象、属性、事件手册集合方便查询
2010/07/04 Javascript
Jquery 表格合并的问题分享
2011/09/17 Javascript
使用AOP改善javascript代码
2015/05/01 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
2018/09/12 Javascript
微信小程序收货地址API兼容低版本解决方法
2019/05/18 Javascript
Python 用户登录验证的小例子
2013/03/06 Python
Django发送html邮件的方法
2015/05/26 Python
Python Socket使用实例
2017/12/18 Python
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
Selenium元素的常用操作方法分析
2018/08/10 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
python各层级目录下import方法代码实例
2020/01/20 Python
Python如何使用turtle库绘制图形
2020/02/26 Python
Python通过socketserver处理多个链接
2020/03/18 Python
CSS3实现时间轴效果
2016/07/11 HTML / CSS
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
《自然之道》教学反思
2014/02/11 职场文书
文化与传播毕业生求职信
2014/03/09 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书
分析SQL窗口函数之取值窗口函数
2022/04/21 Oracle