NPM测试模块之rewire教程
摘要:有了rewire模块,再也不用担心测试私有函数了。
在玩转Node.js单元测试,我介绍了3个用于编写测试代码的NPM模块:Mocha, Should以及SuperTest。为了怂恿大家写单元测试,我再介绍一款神奇的NPM测试模块:rewire。
- GitHub仓库: Fundebug/rewire-tutorial
rewire原理
对于技术,知其然,也应该知其所以然。
对于rewire,它的基本功能与require相同,都是用于导入模块,只是,它会为导入的模块添加两个特殊的函数:__get__与__set__。顾名思义,这两个函数可以分别用于获取和修改模块中的变量/函数。测试的时候,当我们需要获取或者重写私有变量/函数,rewire非常有用。
__get__: 获取私有变量/函数
下面是需要测试的代码示例1:
// 公有函数add |
可知,add为公有函数,而sub为私有函数。
测试公有函数add时,非常方便,require之后可以直接获取:
// 测试公有函数add |
但是,测试私有函数sub时,使用require是无法获取的。这时,可以使用rewire导入模块,然后使用其提供的__get__方法获取私有函数:
// 测试私有函数sub |
在编写模块的时候,难免存在一些私有变量或者函数,有了rewire,我们就可以方便地获取,然后进行测试。
Fundebug是全栈JavaScript错误监控平台,支持各种前端和后端框架,可以帮助您第一时间发现BUG!
__set__: 重写私有变量/函数
下面是需要测试代码示例2:
var fs = require("fs") function add(a, b) |
可知,如果直接测试的话,add函数的计算结果会写入result.txt文件:
var assert = require("assert"); |
但是,当我们测试时,并不希望去写磁盘,因为当内容很多时,这样比较浪费时间。这时,我们可以使用rewire导入模块,然后使用其提供的__set__来重写fs模块,避免真的去写磁盘:
var assert = require("assert"); |
在实践中,为了简化测试和节省时间,我们通常需要去重写函数调用的外部函数,这时可以选择使用rewire模块实现。
另外,rewire模块还提供了__with__接口,可以用于一次性重写私有变量/函数。不过这个功能通常可以使用mocha的before/after以及beforeEach/afterEach来实现,更为直观,因此本文不再介绍。
参考
版权声明:
转载时请注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/12/27/npm-rewire-tutorial/
NPM测试模块之rewire教程的更多相关文章
- 前端测试框架Jest系列教程 -- 简介
写在前面: 随着互联网日新月异的发展,用户对于页面的美观度,流畅度以及各方面的体验有了更高的要求,我们的网页不再是简单的承载文字,图片等简单的信息传递给用户,我们需要的是更加美观的页面展示,更快的浏览 ...
- npm常用模块汇总
npm常用模块汇总: 点击插件名字,查看使用文档 npm常用模块汇总 node常用模块汇总 gulp常用插件汇总 npx 使用教程:npx使用教程 bable:bable这是JavaScript编译器 ...
- 转载自-阮一峰-测试框架 Mocha 实例教程
测试框架 Mocha 实例教程 作者: 阮一峰 日期: 2015年12月 3日 Mocha(发音"摩卡")诞生于2011年,是现在最流行的JavaScript测试框架之一,在浏 ...
- 前端测试框架Jest系列教程 -- Mock Functions
写在前面: 在写单元测试的时候有一个最重要的步骤就是Mock,我们通常会根据接口来Mock接口的实现,比如你要测试某个class中的某个方法,而这个方法又依赖了外部的一些接口的实现,从单元测试的角度来 ...
- 前端测试框架Jest系列教程 -- Global Functions(全局函数)
写在前面: Jest中定义了很多全局性的Function供我们使用,我们不必再去引用别的包来去实现类似的功能,下面将列举Jest中实现的全局函数. Jest Global Functions afte ...
- Python测试模块doctest
面试被问到了却没有用过,很尴尬:今天看了一下,真的是一个很简单的测试模块 方便起见,这里直接拿菜鸟教程的介绍和例子过来 开发高质量软件的方法之一是为每一个函数开发测试代码,并且在开发过程中经常进行测试 ...
- 可以用py库: pyautogui (自动测试模块,模拟鼠标、键盘动作)来代替pyuserinput
PyAutoGUI 是一个人性化的跨平台 GUI 自动测试模块 pyUserInput模块安装前需要安装pywin32和pyHook模块.(想要装的看https://www.cnblogs.com/m ...
- 前端测试框架Jest系列教程 -- Mock Functions(模拟器)
写在前面: 在写单元测试的时候有一个最重要的步骤就是Mock,我们通常会根据接口来Mock接口的实现,比如你要测试某个class中的某个方法,而这个方法又依赖了外部的一些接口的实现,从单元测试的角度来 ...
- py库: pyautogui (自动测试模块,模拟鼠标、键盘动作)
PyAutoGUI 是一个人性化的跨平台 GUI 自动测试模块 pyautogui 库 2017-10-4 pip install pyautogui python pip.exe install p ...
随机推荐
- 一线互联网常见的14个Java面试题,你颤抖了吗程序员
跳槽不算频繁,但参加过不少面试(电话面试.face to face面试),面过大/小公司.互联网/传统软件公司,面糊过(眼高手低,缺乏实战经验,挂掉),也面过人,所幸未因失败而气馁,在此过程中不断查缺 ...
- git常用命令速查:创建,修改提交,撤销,切换分支,合并分支,变基解决冲突
创建 $ git init #在当前目录下创建一个空的本地仓库 $ rm -rf .git #删除本地仓库 $ git add . #把当前目录下的所有文件添加到暂存区 $ git commi ...
- centos7使用wordpress布署网站(2)
1.接下来需要配置数据库,为使用wordpress做准备 修改认证方式: vim .../phpMyAdmin/config.inc.php [...] $cfg['Servers'][$i]['au ...
- Javascript高级编程学习笔记(58)—— 事件(2)事件处理程序
事件处理程序 事件处理程序即响应某个事件的函数 事件处理程序以 “on” 开头 如“onclick”,“onload” HTML事件处理程序 某个元素支持的每种事件都可以使用一个与响应的事件处理程序同 ...
- eclipse遇到的问题
引用不了R文件,可能是导包导错了cannot be resolved or is not a field:首先检查你的XML是否保存了,再检查你的import导入的R文件是你包名+R还是android ...
- Java核心技术卷一基础知识-第3章-Java的基本程序设计结构-读书笔记
第3章 Java的基本程序设计结构 本章内容: 一个简单的Java应用程序 字符串 注释 输入输出 数据类型 控制流 变量 大数值 运算符 数组 本章主要讲述程序设计相关的基本概念(如数据类型.分支以 ...
- 吴恩达机器学习笔记28-多类分类(Multiclass Classification)
当我们有不止两种分类时(也就是
- 用CSS解决一个让人头疼的问题
需求:下面的文字内容分别都写在一个a标签里,现在需要获取到每一行最后一个a标签的竖线,并删除 我首先想到的是用CSS3新增选择器—— :nth-child()来解决,比如 :nth-child(3n ...
- [Swift]创建CoreData的两种方式
一.CoreData介绍 CoreData主要分为两部分: 上层是模型层,模型层有NSManagedObjectContext上下文管理着, 底层则是由SQLite实现的持久化部分,通过NSPersi ...
- 【array】数组复习
一.定义 数组:一组相关变量的集合. 二.初始化 三种方法初始化: int [] intArray = new int[4]; //必须表明容量才表示已经初始化,不带的话会报错未初始化 String ...