对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 相关文章推荐
ExtJS 2.0实用简明教程 之Ext类库简介
Apr 29 Javascript
28个常用JavaScript方法集锦
Jan 14 Javascript
jquery实现点击变换导航样式的方法
Aug 31 Javascript
跟我学习javascript的异步脚本加载
Nov 20 Javascript
javascript图片预加载完整实例
Dec 10 Javascript
javascript简单比较日期大小的方法
Jan 05 Javascript
JS公共小方法之判断对象是否为domElement的实例
Nov 25 Javascript
js实现音乐播放控制条
Sep 09 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
Oct 07 Javascript
js事件机制----捕获与冒泡机制实例分析
May 22 Javascript
Vue-cli3生成的Vue项目加载Mxgraph方法示例
May 31 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
Nov 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
轻松入门: 煮好咖啡的七个诀窍
2021/03/03 冲泡冲煮
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
jquery搜索框效果实现方法
2015/01/16 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
AngularJS 最常用的功能汇总
2016/02/17 Javascript
artDialog+plupload实现多文件上传
2016/07/19 Javascript
AngularJS 过滤与排序详解及实例代码
2016/09/14 Javascript
jquery实现动态添加附件功能
2018/10/23 jQuery
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
layui实现多图片上传并限制上传的图片数量
2019/09/26 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
解决vue addRoutes不生效问题
2020/08/04 Javascript
浅谈vue中resetFields()使用注意事项
2020/08/12 Javascript
Python正规则表达式学习指南
2016/08/02 Python
Python爬取京东的商品分类与链接
2016/08/26 Python
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
Python循环实现n的全排列功能
2019/09/16 Python
基于SpringBoot构造器注入循环依赖及解决方式
2020/04/26 Python
html5 更新图片颜色示例代码
2014/07/29 HTML / CSS
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
加拿大著名的奢侈品购物网站:SSENSE(支持中文)
2020/06/25 全球购物
写给老婆的检讨书
2014/02/21 职场文书
给校长的建议书
2014/03/12 职场文书
《闻一多先生的说和做》教学反思
2014/04/28 职场文书
应急管理培训方案
2014/06/12 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
怎样写家长意见
2015/06/04 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
Nginx配置https原理及实现过程详解
2021/03/31 Servers
Python测试框架pytest高阶用法全面详解
2022/06/01 Python