对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插件 tabBox实现代码
Feb 09 Javascript
jQuery.extend 函数的详细用法
Jun 27 Javascript
JS在textarea光标处插入文本的小例子
Mar 22 Javascript
jQuery实现的多选框多级联动插件
May 02 Javascript
node.js中的fs.createReadStream方法使用说明
Dec 17 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
Dec 17 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
Jun 19 Javascript
jquery.validate使用详解
Jun 02 Javascript
AngularJs Javascript MVC 框架
Jun 20 Javascript
javascript实现Java中的Map对象功能的实例详解
Aug 21 Javascript
vue实现路由不变的情况下,刷新页面操作示例
Feb 02 Javascript
vue键盘事件点击事件加native操作
Jul 27 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
yii插入数据库防并发的简单代码
2017/05/27 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
JavaScript 学习笔记(七)字符串的连接
2009/12/31 Javascript
bgsound 背景音乐 的一些常用方法及特殊用法小结
2010/05/11 Javascript
编写自己的jQuery插件简单实现代码
2011/04/19 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
2013/12/12 Javascript
java和javascript获取word文档的书签位置对比
2014/06/19 Javascript
浅谈EasyUI中Treegrid节点的删除
2015/03/01 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
Web打印解决方案之普通报表打印功能
2016/08/29 Javascript
详解react-refetch的使用小例子
2019/02/15 Javascript
小程序两种滚动公告栏的实现方法
2019/09/17 Javascript
element-ui table组件如何使用render属性的实现
2019/11/04 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
原生小程序封装跑马灯效果
2020/10/21 Javascript
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
python爬虫实战之最简单的网页爬虫教程
2017/08/13 Python
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
python简单实现AES加密和解密
2019/03/28 Python
草莓网化妆品加拿大网站:Strawberrynet Canada
2016/09/20 全球购物
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
实习求职信
2013/12/01 职场文书
八年级音乐教学反思
2014/01/09 职场文书
文明学生事迹材料
2014/01/29 职场文书
干部现实表现材料
2014/02/13 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
篝火晚会主持词
2014/03/25 职场文书
中学生社会实践活动总结
2014/07/03 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书