我似乎无法将readFileSync从NodeJS核心存根到fs上。下面的代码隔离了这个问题。通过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.jstest.js可以通过从提示符执行mocha tests/test.js来运行。
我注意到,几年前,有一篇文章报道了一个类似的问题,但我不知道是同一个问题,还是另一个问题。下面是链接:
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": {}
...
}任何帮助都是非常感谢的!
发布于 2017-07-18 21:43:00
如果您也使用fs.readFileSync()来替换它,则不需要使用存根proxyquire (实际上,顽固的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');
});
});https://stackoverflow.com/questions/45177024
复制相似问题