gpt4 book ai didi

node.js - Proxyquire:无法 stub fs.readFileSync

转载 作者:太空宇宙 更新时间:2023-11-03 22:50:47 27 4
gpt4 key购买 nike

我似乎无法从 NodeJS 核心在 fs 上 stub readFileSync。以下代码隔离了该问题。通过 Mocha 运行测试结果如下:

> mocha tests/test.js

Some description
1) "before all" hook


0 passing (15ms)
1 failing

1) Some description "before all" hook:
TypeError: Cannot read property 'charCodeAt' of undefined
at Object.stripBOM (internal/module.js:48:14)
at Object.require.extensions.(anonymous function) (node_modules/proxyquire/lib/proxyquire.js:276:43)
at Proxyquire._withoutCache (node_modules/proxyquire/lib/proxyquire.js:179:12)
at Proxyquire.load (node_modules/proxyquire/lib/proxyquire.js:136:15)
at Context.<anonymous> (tests/test.js:12:15)

这是测试/test.js

var proxyquire = require('proxyquire'),
sinon = require('sinon'),
fs = require('fs'),
sut;

describe('Some description', function () {
var readFileSyncStub;

before(function () {
readFileSyncStub = sinon.stub(fs, 'readFileSync');
readFileSyncStub.withArgs('someFile.js', { encoding: 'utf8' }).returns('some text');
sut = proxyquire('../sut', { fs: { readFileSync: readFileSyncStub } }); // Exception encountered somewhere in here ...
});

after(function () {
fs.readFileSync.restore(); // This is executed ...
});

it('Some it', function () {
// This never happens ...
});
});

这是 sut.js,它是正在测试的模块:

var fs = require('fs'); // The code in this file is never executed ...

module.exports = function () {
return fs.readFileSync('someFile.js', { encoding: 'utf8' });
};

该项目的文件夹结构是:

./sut.js
./package.json
./tests/test.js

test.js 可以通过在提示符下执行 mochatests/test.js 来运行。

我注意到几年前 Github 上报告了一个看起来相似的问题,但我无法判断这是同一个问题还是不同的问题。链接如下:

https://github.com/thlorenz/proxyquire/issues/12

如果有帮助,这些是我的 package.json 文件中的依赖项。我尝试使用与 proxyquire 依赖项类似的版本:

{
...
"devDependencies": {
"jshint": "^2.9.5",
"jslint": "^0.11.0",
"mocha": "~3.1",
"proxyquire": "^1.8.0",
"sinon": "~1.9"
},
"dependencies": {}
...
}

非常感谢任何帮助!

最佳答案

如果您使用proxyquire来替换它,则不需要 stub fs.readFileSync()(事实上, stub fs.readFileSync() 会导致您的问题,因为它破坏了 require()proxyquire)。

试试这个:

describe('Some description', function () {
var readFileSyncStub;

before(function() {
readFileSyncStub = sinon.stub()
.withArgs('someFile.js', { encoding: 'utf8' })
.returns('some text');
sut = proxyquire('../sut', { fs : { readFileSync : readFileSyncStub } });
});

it('Some it', function () {
let value = sut();
assert.equal(value, 'some text');
});

});

关于node.js - Proxyquire:无法 stub fs.readFileSync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45177024/

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