gpt4 book ai didi

javascript - 如何在测试期间 stub node.js 内置 fs?

转载 作者:IT老高 更新时间:2023-10-28 21:59:35 25 4
gpt4 key购买 nike

我想对 fs 之类的 node.js 内置插件 stub ,这样我实际上就不会进行任何系统级文件调用。我唯一能想到的就是将 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用于删除 require(...) 语句

被测模块

模块-a.js

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

测试代码

module-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()

关于javascript - 如何在测试期间 stub node.js 内置 fs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15721619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com