对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 相关文章推荐
JavaScript网页制作特殊效果用随机数
May 22 Javascript
通过jquery的$.getJSON做一个跨域ajax请求试验
May 03 Javascript
jQuery ajax调用WCF服务实例
Jul 16 Javascript
javascript设计模式之中介者模式Mediator
Dec 30 Javascript
基于jquery实现省市联动效果
Nov 23 Javascript
javascript实现任务栏消息提示的简单实例
May 31 Javascript
js变量提升深入理解
Sep 16 Javascript
JavaScript 对象详细整理总结
Sep 29 Javascript
将鼠标焦点定位到文本框最后(代码分享)
Jan 11 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
Oct 09 Javascript
Jquery异步上传文件代码实例
Nov 13 jQuery
js不常见操作运算符总结
Nov 20 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
php中session_unset与session_destroy的区别分析
2011/06/16 PHP
php中获取远程客户端的真实ip地址的方法
2011/08/03 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
Yii实现多数据库主从读写分离的方法
2014/12/29 PHP
php 类自动载入的方法
2015/06/03 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
Yii rules常用规则示例
2016/03/15 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
2021/03/09 PHP
qTip 基于JQuery的Tooltip插件[兼容性好]
2010/09/01 Javascript
JQuery for与each性能比较分析
2013/05/14 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
浅谈javascript原型链与继承
2015/07/13 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
nodejs实现套接字服务功能详解
2018/06/21 NodeJs
jQuery 图片查看器插件 Viewer.js用法简单示例
2020/04/04 jQuery
Vue获取微博授权URL代码实例
2020/11/04 Javascript
Python机器学习之决策树算法实例详解
2017/12/06 Python
对python中使用requests模块参数编码的不同处理方法
2018/05/18 Python
深入浅析Python中的迭代器
2019/06/04 Python
python飞机大战pygame游戏背景设计详解
2019/12/17 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
2020/07/02 Python
如何解决python多种版本冲突问题
2020/10/13 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
白兰氏健康Mall:BRAND’S
2017/11/13 全球购物
全球立体声:World Wide Stereo
2018/09/29 全球购物
数据库基础的一些面试题
2012/02/25 面试题
大三学生入党思想汇报
2014/01/02 职场文书
俄罗斯商务邀请函
2014/01/26 职场文书
运动会演讲稿300字
2014/08/25 职场文书
Python Django搭建文件下载服务器的实现
2021/05/10 Python