Node.js测试中的Mock文件系统详解


Posted in Javascript onNovember 21, 2016

Mock文件系统相关的工具包括:

    Mock fs 模块的工具mock-fs

    Mock require 模块的工具mock-require

安装

mock-fsmock-require 都是NPM软件包,在项目中可通过npm直接安装:

npm install mock-fs mock-require --save

Mock fs 模块

通过mock()方法可以创建多个文件的Mock并立即生效, 此后对fs的调用都会访问这些Mock文件。 调用mock.restore()可取消Mock并恢复fs。

var fs = require('fs');
var mock = require('mock-fs');

describe('fs', function() {
 beforeEach(function() {
  mock({
   './CNAME': 'harttle.com',
   './_config.yml': 'empty'
  });
 });
 afterEach(function() {
  mock.restore();
 });
 describe('#readFileSync()', function() {
  it('should read all content', function() {
   var str = fs.readFileSync('CNAME', 'utf8');
   expect(str).to.equal('harttle.com');
  });
 });
});

Mock require 机制

mock-fs的原理是重写fs模块的文件读写功能,重定向到Mock文件。 所以对require并不起作用。 为了让require读取Mock文件,只能重写require方法。 mock-require便是封装了该操作。

通过mock方法进行Mock,通过mock.stopAll停止Mock并恢复require

const mock = require('mock-require');

describe('parser', function() {
 beforeEach(function() {
  mock('/package.json', {
   "name": "sample-module",
   "version": "1.0.0",
   "view": "htmls/my-html.hbs",
   "router": "svr.js"
  });
 });
 afterEach(function() {
  mock.stopAll();
 });

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
jQuery 使用个人心得
Feb 26 Javascript
JQuery的Validation插件中Remote验证的中文问题
Jul 26 Javascript
JavaScript中的私有/静态属性介绍
Jul 26 Javascript
Javascript浅谈之this
Dec 17 Javascript
文字垂直滚动之javascript代码
Jul 29 Javascript
js文本框输入内容智能提示效果
Dec 02 Javascript
JS遍历页面所有对象属性及实现方法
Aug 01 Javascript
微信小程序前端源码逻辑和工作流
Sep 25 Javascript
JS实现的自动打字效果示例
Mar 10 Javascript
微信小程序实现带缩略图轮播效果
Nov 04 Javascript
详解vue 路由跳转四种方式 (带参数)
Apr 28 Javascript
简单实现节流函数和防抖函数过程解析
Oct 08 Javascript
JavaScript中boolean类型之三种情景实例代码
Nov 21 #Javascript
基于jQuery实现Tabs选项卡自定义插件
Nov 21 #Javascript
基于jQuery实现Accordion手风琴自定义插件
Oct 13 #Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
Nov 21 #Javascript
js原生实现FastClick事件的实例
Nov 20 #Javascript
常用原生js自定义函数总结
Nov 20 #Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
Nov 20 #Javascript
You might like
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
PHP大神的十大优良习惯
2016/09/14 PHP
js 获取屏幕各种宽高的方法(浏览器兼容)
2013/05/15 Javascript
javascript的document.referrer浏览器支持、失效情况总结
2014/07/18 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
jQuery检测输入的字符串包含的中英文的数量
2015/04/17 Javascript
javascript数据类型验证方法
2015/12/31 Javascript
BootStrap中
2016/12/10 Javascript
JS中闭包的经典用法小结(2则示例)
2016/12/28 Javascript
基于Bootstrap框架实现图片切换
2017/03/10 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
Python新手实现2048小游戏
2015/03/31 Python
python实现简单ftp客户端的方法
2015/06/28 Python
python字符串string的内置方法实例详解
2018/05/14 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
python实现栅栏加解密 支持密钥加密
2019/03/20 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
2020/03/09 Python
python os模块在系统管理中的应用
2020/06/22 Python
Python rabbitMQ如何实现生产消费者模式
2020/08/24 Python
python绘制趋势图的示例
2020/09/17 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
主持人婚宴答谢词
2014/01/28 职场文书
四年大学自我鉴定
2014/02/17 职场文书
解除施工合同协议书
2014/10/17 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书
少先队辅导员事迹材料
2014/12/24 职场文书
销售业务员岗位职责
2015/02/13 职场文书
2015年大学迎新工作总结
2015/07/16 职场文书
运输公司工作总结
2015/08/11 职场文书
市场营销计划书
2019/04/24 职场文书
Python利用folium实现地图可视化
2021/05/23 Python