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 select选中的一个小问题
Oct 11 Javascript
Javascript中找到子元素在父元素内相对位置的代码
Jul 21 Javascript
使用js写的一个简易的投票
Nov 27 Javascript
详解js闭包
Sep 02 Javascript
jquery中获取元素里某一特定子元素的代码
Dec 02 Javascript
JavaScript设置body高度为浏览器高度的方法
Feb 09 Javascript
js图片切换具体实现代码
Oct 13 Javascript
Js apply方法详解
Feb 16 Javascript
Vue中对比scoped css和css module的区别
May 17 Javascript
JS实现判断有效的数独算法示例
Feb 25 Javascript
详解使用React制作一个模态框
Mar 14 Javascript
浅谈发布订阅模式与观察者模式
Apr 09 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
简单易用的计数器(数据库)
2006/10/09 PHP
PHP连接MongoDB示例代码
2012/09/06 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
解析arp病毒背后利用的Javascript技术附解密方法
2007/08/06 Javascript
再谈javascript原型继承
2014/11/10 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
jQuery中的select操作详解
2016/11/29 Javascript
vue2过滤器模糊查询方法
2018/09/16 Javascript
使用ECharts实现状态区间图
2018/10/25 Javascript
[02:23]DOTA2英雄基础教程 幻影长矛手
2013/12/09 DOTA
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
[01:28:56]2014 DOTA2华西杯精英邀请赛 5 24 CIS VS DK
2014/05/26 DOTA
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
python利用lxml读写xml格式的文件
2017/08/10 Python
快速了解Python开发中的cookie及简单代码示例
2018/01/17 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
2019/12/20 Python
Python3 解决读取中文文件txt编码的问题
2019/12/20 Python
Pandas DataFrame求差集的示例代码
2020/12/13 Python
python绘图模块之利用turtle画图
2021/02/12 Python
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
地球鞋加拿大官网:Earth Shoes Canada
2020/11/17 全球购物
ORACLE十问
2015/04/20 面试题
医科大学生的自我评价
2013/12/04 职场文书
通用求职信范文模板分享
2013/12/27 职场文书
银行员工职业规划范文
2014/01/21 职场文书
军训自我鉴定范文
2014/02/13 职场文书
数控技校生自我鉴定
2014/03/02 职场文书
医学专业自荐信
2014/06/14 职场文书
Redis监控工具RedisInsight安装与使用
2022/03/21 Redis