对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 相关文章推荐
JS学习之一个简易的日历控件
Mar 24 Javascript
jQuery学习笔记之Helloworld
Dec 22 Javascript
JQuery 操作/获取table具体代码
Jun 13 Javascript
jQuery 三击事件实现代码
Sep 11 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
Jan 07 Javascript
js上传图片及预览功能实例分析
Apr 24 Javascript
第九篇Bootstrap导航菜单创建步骤详解
Jun 21 Javascript
div实现自适应高度的textarea实现angular双向绑定
Jan 08 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
Feb 04 Javascript
Three.js中网格对象MESH的属性与方法详解
Sep 27 Javascript
vue cli webpack中使用sass的方法
Feb 24 Javascript
vue 微信扫码登录(自定义样式)
Jan 06 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
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
php中explode与split的区别介绍
2012/10/03 PHP
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
深入file_get_contents函数抓取内容失败的原因分析
2013/06/25 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
完整删除ecshop中获取店铺信息的API
2014/12/24 PHP
JavaScript 应用类库代码
2008/06/02 Javascript
javascript indexOf函数使用说明
2008/07/03 Javascript
Ext 表单布局实例代码
2009/04/30 Javascript
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
2016/04/08 Javascript
javascript 广告移动特效的实现代码
2016/06/25 Javascript
URL中“#” “?” &“”号的作用浅析
2017/02/04 Javascript
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
2018/09/14 Javascript
Mint UI实现A-Z字母排序的城市选择列表
2018/12/28 Javascript
关于element-ui表单中限制输入纯数字的解决方式
2020/09/08 Javascript
深入解析Python中函数的参数与作用域
2016/03/20 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
浅谈Python NLP入门教程
2017/12/25 Python
python方向键控制上下左右代码
2018/01/20 Python
PyQt5 界面显示无响应的实现
2020/03/26 Python
python类共享变量操作
2020/09/03 Python
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
2016/04/13 面试题
制定岗位职责的原则
2013/11/08 职场文书
聚美优品广告词改编
2014/03/14 职场文书
省级优秀毕业生主要事迹
2014/05/29 职场文书
财务工作疏忽检讨书
2014/09/11 职场文书
个人股份合作协议书
2014/10/24 职场文书
2014年村官工作总结
2014/11/24 职场文书
nginx 反向代理之 proxy_pass的实现
2021/03/31 Servers