如何在测试期间对 Node.js 内置 fs 进行存根?

2023-12-23

我想存根 Node.js 内置组件,例如fs这样我实际上就不会进行任何系统级文件调用。我唯一能想到的就是通过fs以及所有其他内置函数作为我所有函数的参数,以避免使用真正的 fs。这看起来有点愚蠢,并且创建了一个冗长的函数签名,里面挤满了内置函数作为参数。

var fs = require('fs');

function findFile(path, callback) {
  _findFile(fs, path, callback);
}

function _findFile(fs, path, callback) {
  fs.readdir(path, function(err, files) {
     //Do something.
  });
}

然后在测试过程中:

var stubFs = {
  readdir: function(path, callback) {
     callback(null, []);
  }
};

_findFile.(stubFs, testThing, testCallback);

还有比这更好的方法吗?


我喜欢用rewire https://github.com/jhnns/rewire用于删除 require(...) 语句

待测模块

模块a.js

var fs = require('fs')
function findFile(path, callback) {
  fs.readdir(path, function(err, files) {
     //Do something.
  })
}

测试代码

模块-a-test.js

var rewire = require('rewire')
var moduleA = rewire('./moduleA')
// stub out fs
var fsStub = {
  readdir: function(path, callback) {
     console.log('fs.readdir stub called')
     callback(null, [])
  }
}
moduleA.__set__('fs', fsStub)
// call moduleA which now has a fs stubbed out
moduleA()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在测试期间对 Node.js 内置 fs 进行存根? 的相关文章

  • D3更新circle-pack数据新节点与现有节点重叠

    我正在关注一般更新模式 http bl ocks org mbostock 3808234但在分层方面存在问题 使用圆形包装布局 我pack新数据 update enter and exit圆形元素 然而 当新元素enter 它们重叠upd
  • CryptoJS 使用密码加密 AES,但 PHP 解密需要密钥

    我在用CryptoJS https code google com p crypto js AES加密字符串 function doHash msg msg String msg var passphrase aggourakia var
  • 有没有办法让 jslint 在 javascript 的下一行中使用大括号?

    我改变了我的编码风格 function getParams entity use strict var accountID store getItem AccountID switch entity case Topic to functi
  • JS文件中的System.register是什么意思?

    在 Angular 2 中使用指令时 JS 文件中的 System register 是什么意思 我认为这个问题并不特定于 Angular2 中的指令 它是关于 ES6 TypeScript 和其他使用 SystemJS 的现代编译器的一般
  • 每n秒执行一次函数

    我制作了这个在 10 秒后点击链接的代码片段 function timeout window setTimeout function img left click 1000 setTimeout timeout 1000 timeout 我
  • 在 Cordova 中合并文件的多个部分

    在我的 Cordova 应用程序中 我正在下载任意文件 例如图像或视频文件 这是通过 Cordova 文件传输插件和 Range 标头完成的 因为我需要分段下载文件 我的问题是 我想将几 个小 字节 文件合并回原来的文件中 他们曾经在其中使
  • 由于 MIME 类型而导致资源被阻止?

    多年来我已经成功地包含动态创建的 javascript 文件 这是一个例子 https granadainfo com sups php locs 95 https granadainfo com sups php locs 95 正如你所
  • 纯 JS 相当于 Jquery eq()

    jquery 的纯等价物是什么eq 例如 我怎样才能实现 class1 class2 eq 0 text 1254 在纯 JavaScript 中 要获取数组中的元素索引 可以使用 在 JavaScript 中 因此 要重现您的代码 您可以
  • 为什么我需要使用 setState 回调来设置依赖于第一个项目的 setState 完成的第二个状态项目的状态?

    在此 componentDidUpdate 方法中 执行 setState 将引号设置为从 fetch 返回的内容后 我必须使用回调再次执行 setState 将 randomQuoteIndex 设置为调用 randomQuoteInde
  • 在 UIWebView 中禁用复制和粘贴

    几乎 我已经尝试了一切方法来禁用复制 粘贴UIWebView但对我来说没有任何作用 我正在加载我的UIWebView来自字符串 字符串数组 如下所示 webView loadHTMLString NSString stringWithFor
  • 如何防止输入文本中出现“后重音”

    我相信这是一个简单的问题 但在谷歌上搜索几个小时后我找不到任何答案 也许我无法在搜索中使用正确的单词 P 我有一个 javascript 方法 可以防止用户用数字以外的其他字符填充文本框 如下面的代码所示 它在 KeyDown 事件中使用
  • 使用 Javascript/Node.js 在代码内执行 mongoimport

    node js javascript 中是否有任何库可供个人使用mongoimport在代码中 据我了解 mongoimport 有点像 exe 您必须先执行它 然后才能使用其文本输入环境 是否可以在我的代码中执行 mongoimport
  • 使用 JavaScript 防止网页导航离开

    如何使用 JavaScript 防止网页导航离开 Using onunload允许您显示消息 但不会中断导航 因为为时已晚 然而 使用onbeforeunload将中断导航 window onbeforeunload function re
  • 在 javascript 中实现固定位置会导致 Safari 滚动时出现抖动

    固定位置不适用于我的用例 因为它固定在浏览器窗口上 您可能会处于文本在屏幕右侧之外且无法到达的状态 无论如何 我尝试使用绝对定位 然后调整javascript中的 顶部 它在 Firefox 和 Chrome 中运行良好 但在 Safari
  • Javascript等待/异步执行顺序

    所以我试图把我的头脑集中在 Promise await async 上 我不明白为什么当 go 执行时 带有 finished 的警报会紧随 console log coffee 之后 当所有函数都使用等待 承诺时 为什么它只等待 getC
  • 从请求url获取hash参数

    我有这样的网址 http www coolsite com daily plan id 1 http www coolsite com daily plan id 1解析该字符串并读取哈希值 id 之后的值 的最简单方法是什么 谢谢 在客户
  • 如何使用 Javascript OAuth 库不暴露您的密钥?

    看着Twitter OAuth 库 https dev twitter com docs twitter libraries 我看到了这个注释 将 JavaScript 与 OAuth 结合使用时要小心 不要暴露你的钥匙 然后 看着jsOA
  • 猫鼬中的数组过滤器

    将查询转换为节点 arrayfilter 在 mongoose 中工作的版本或者如何在节点应用程序中运行它们 db getCollection student update id ObjectId 5a377d62d21a3025a3c3a
  • 在 Firestore 文本字段中存储文本文件并删除换行符

    我正在尝试将 CSV 文件存储在 Cloud Firestore 内的文本字段中 然而 Firestore 正在删除所有换行符并将整个 CSV 文件存储为一行 这Firestore 数据类型文档 https firebase google
  • Safari 扩展将消息发送到特定选项卡

    有没有办法从全局页面发送消息到特定选项卡 我目前正在做的是 在创建选项卡时 注入的脚本会创建一个唯一的 ID 并将包含该编号的消息发送到全局页面 并且全局页面会保存该编号 如果全局页面需要发送一些数据到一个tab 即 tab 3 然后全局页

随机推荐

  • pdf.js 获取有关嵌入字体的信息

    我正在使用 pdf js 获取文本我得到带有字体信息的块 Object str blabla dir ltr width 191 433141 height 12 546 transform Array 6 fontName g d0 f2
  • 同时使用复选框和下拉菜单进行准确过滤

    我正在构建一个非常可排序 可过滤的图像库 其中包含很多标签 这个问题是基于这个如何让下拉菜单表现得像复选框 https stackoverflow com q 68315184在那里我得到了大部分问题的解答 编辑 这里进一步采取了这个问题的
  • 流上的 C++ 正则表达式

    我有一个非常大的文本文件 最多几百 MB 我想使用 STL 正则表达式对其进行处理 我正在寻找的匹配区域跨越几行 并且在文件中至少出现几千次 我可以使用流迭代器来实现此目的吗 我试过了std istream iterator
  • Linux 中没有 X.org 的 OpenGL

    我想在 Linux 中打开一个没有 X 的 OpenGL 上下文 有什么办法可以做到吗 我知道集成英特尔显卡硬件是可能的 尽管大多数人的系统中都有 Nvidia 卡 我想要一个适用于 Nvidia 卡的解决方案 如果除了通过集成英特尔硬件之
  • C - 不同文件中全局定义的变量显示不带 extern 修饰符的外部链接

    彻底迷茫了 我很沮丧 因为我认为准确了解范围和链接如何工作很重要 但我一直看到有关的相互矛盾的信息extern我的编译器 链接器与我读到的内容相矛盾 main c int int1 void main int1 6 printf nMain
  • Scipy.optimize.l_bfgs_b:为什么它会多次计算相同的函数值?

    我目前正在尝试使用 scipy optimize 来查找尝试拟合某些数据的模拟参数 A 创建了一个函数 给出我的模型在数据上的卡方 以便 scipy optimize 必须最小化该函数 我进行模拟的主要问题之一是 因此被调用的函数非常耗时
  • Python无法导入DataFrame

    我正在尝试在 Python 中使用 Pandas 来导入和操作一些 csv 文件 我的代码是这样的 import pandas as pd from pandas import dataframe data df pd read csv h
  • Angular2 没有渲染器提供者! (NgModel -> 令牌 NgValueAccessor -> DefaultValueAccessor -> 渲染器)

    我在customModal ts中自定义模态shlomiassaf angular2 modal https github com shlomiassaf angular2 modal 具体来说 我添加一个包含ngModel的输入 它导入了
  • 将 MaterialToggleButton 的选定颜色更改为纯色

    无法将 MaterialToggleButton 的选定颜色设置为纯色 仅显示原色的透明阴影 我尝试了下面的代码集 输出图像如下所示 样式中的按钮主题
  • 使用 geom_sf 制作包含一组子区域的地图

    我想制作一张仅包含子区域组外部边界的地图 下面绘制了所有子区域 我想制作一张地图 但仅包含所在区域的外部边界region栏目中的spain目的 我尝试过几个aes like fill and group甚至在绘制之前进行分组但找不到正确的方
  • Android 解析 JSON 数组

    如何解析 JSON ARRAY 来获取没有 和 的数据 这是 json formattedAddress 23 Damansara Puchong Hwy Bandar Puchong Jaya 47100 Puchong Batu Dua
  • 设置 JQuery event.preventDefault() 时绕过 window.open 上的弹出窗口阻止程序

    我想在超链接的单击事件上有条件地显示 JQuery 对话框 我有一个要求 比如在条件 1 上打开一个 JQuery 对话框 如果条件 1 不满足 则导航到其点击事件有问题的 href 标记引用的页面 我可以在链接的点击事件上调用函数 该函数
  • 为什么我的 Scala 列表在以下代码中消失了?

    val files new File data list val filtered files filter name gt name contains txn val masterList new ListBuffer String fo
  • ISIN 至少有 1 个号码

    我有以下正则表达式来解析债券 资产等的 ISIN 2 个字符后跟 10 个数字和字符 A Z 2 A Z0 9 10 但这也标记了例如这样的单词ABCDEFGHIJKL 但这不是真正的 ISIN ISIN 的定义如下 WIKI https
  • 仅在加载 Google Web Font 后才绘制到画布

    我在用 fillText 在画布上 我希望其文本采用 Google Web 字体 在我的例子中为 Oswald 当页面加载时 文本在字体加载之前被绘制到画布上 但显然一旦字体加载 画布上的文本就不会更新 因为它已经被绘制为位图 如何延迟此文
  • 基于向量重叠从列表中删除和添加元素

    我有一个包含约 500 个模型对象的列表 该对象的名称是 v1 existing list lt vector list 3 v1 lt names existing list lt c A B C 我现在得到了不同的数据集 我也需要对其进
  • 实体框架 Code First 的 Spatial / DBGeography 属性索引

    我有一个 EF 6 1 代码优先项目 其模型之一具有 DbGeography 属性 仅包含 POINT 地理 我将对其执行查询 我声明自定义索引如下官方指南 http msdn microsoft com en us data jj5916
  • 使用 ES6 (Babel) 导出类

    我正在使用 ECMAScript 6 编写一些前端代码 使用 BabelJS 进行编译 然后使用 Browserify 进行浏览器化 以便我可以在一个文件中包含一个类 将其导出并将其导入到另一个文件中 我这样做的方式是 export cla
  • SearchView.isFocused 始终返回 false

    我正在尝试确定是否SearchViewActionBar 中的焦点 但当我打电话时SearchView isFocused 我总是得到false因此 即使视图真正聚焦 内部有光标 并且显示软键盘 我如何检查是否SearchView是否专注
  • 如何在测试期间对 Node.js 内置 fs 进行存根?

    我想存根 Node js 内置组件 例如fs这样我实际上就不会进行任何系统级文件调用 我唯一能想到的就是通过fs以及所有其他内置函数作为我所有函数的参数 以避免使用真正的 fs 这看起来有点愚蠢 并且创建了一个冗长的函数签名 里面挤满了内置