对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 相关文章推荐
JMenuTab简单使用说明
Mar 13 Javascript
js innerHTML 的一些问题的解决方法
Jun 22 Javascript
qTip2 精致的基于jQuery提示信息插件
Feb 17 Javascript
用队列模拟jquery的动画算法实例
Jan 20 Javascript
浅析BootStrap中Modal(模态框)使用心得
Dec 24 Javascript
Vue 仿百度搜索功能实现代码
Feb 16 Javascript
js读取json文件片段中的数据实例
Mar 09 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
May 19 Javascript
async/await让异步操作同步执行的方法详解
Nov 01 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
Apr 11 Javascript
如何在vue中使用kindeditor富文本编辑器
Dec 19 Vue.js
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
Apr 13 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
第十三节 对象串行化 [13]
2006/10/09 PHP
PHP中date()日期函数有关参数整理
2011/07/19 PHP
PHP小技巧之函数重载
2014/06/02 PHP
php中smarty实现多模版网站的方法
2015/06/11 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
PHP中非常有用却鲜有人知的函数集锦
2019/08/17 PHP
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
读jQuery之十四 (触发事件核心方法)
2011/08/23 Javascript
扩展JavaScript功能的正确方法(译文)
2012/04/12 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
2014/10/17 Javascript
JS+CSS实现Div弹出窗口同时背景变暗的方法
2015/03/04 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
js+cookies实现悬浮购物车的方法
2015/05/25 Javascript
JS检测页面中哪个HTML标签触发点击事件的方法
2016/06/17 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
2016/07/28 Javascript
jQuery简单实现遍历单选框的方法
2017/03/06 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
javascript实现对话框功能警告(alert 消息对话框)确认(confirm 消息对话框)
2019/05/07 Javascript
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
详解用python生成随机数的几种方法
2019/08/04 Python
Numpy数组array和矩阵matrix转换方法
2019/08/05 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
Html5写一个简单的俄罗斯方块小游戏
2019/12/03 HTML / CSS
全球立体声:World Wide Stereo
2018/09/29 全球购物
学校春季防火方案
2014/06/08 职场文书
财务负责人岗位职责
2015/02/03 职场文书
家庭聚会祝酒词
2015/08/11 职场文书
Java 异步任务计算FutureTask
2022/04/28 Java/Android
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python