首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Proxyquire:无法存储fs.readFileSync

Proxyquire:无法存储fs.readFileSync
EN

Stack Overflow用户
提问于 2017-07-18 21:03:25
回答 1查看 2K关注 0票数 1

我似乎无法将readFileSync从NodeJS核心存根到fs上。下面的代码隔离了这个问题。通过Mocha运行测试结果如下:

代码语言:javascript
复制
> 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

代码语言:javascript
复制
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,这是正在测试的模块:

代码语言:javascript
复制
var fs = require('fs'); // The code in this file is never executed ...

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

该项目的文件夹结构是:

代码语言:javascript
复制
./sut.js
./package.json
./tests/test.js

test.js可以通过从提示符执行mocha tests/test.js来运行。

我注意到,几年前,有一篇文章报道了一个类似的问题,但我不知道是同一个问题,还是另一个问题。下面是链接:

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

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

代码语言:javascript
复制
{
  ...
  "devDependencies": {
    "jshint": "^2.9.5",
    "jslint": "^0.11.0",
    "mocha": "~3.1",
    "proxyquire": "^1.8.0",
    "sinon": "~1.9"
  },
  "dependencies": {}
  ...
}

任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-18 21:43:00

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

试试这个:

代码语言:javascript
复制
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');
  });

});
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45177024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档