首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟文件系统内容不适用于gulp.src

模拟文件系统内容不适用于gulp.src
EN

Stack Overflow用户
提问于 2015-06-03 01:10:04
回答 1查看 260关注 0票数 2

我正在尝试使用mock-fs模拟文件系统内容来测试gulp任务。不幸的是,gulp.src似乎不能很好地与mock-fs合作。具体地说,我得到了ENOENT错误:

代码语言:javascript
复制
Message:
    ENOENT, lstat '/vagrant/study-node-heroku/instances/development/app.json'
Details:
    errno: -2
    code: ENOENT
    path: /vagrant/study-node-heroku/instances/development/app.json
    domainEmitter: [object Object]
    domain: [object Object]
    domainThrown: false
Stack:
Error: ENOENT, lstat '/vagrant/study-node-heroku/instances/development/app.json'
    at Error (native)

我的代码和测试代码的其他部分可以很好地访问mock-fs-created文件。

我做错了什么?我怀疑这个问题与gulp对黑胶的使用有关。

下面是测试中的函数:

代码语言:javascript
复制
var herokuTarball = function(options, done) {
  var instance = options.instance || 'development';
  var tarballName = options.tarballName || instance
  var tarballPath = path.join(config.temp, tarballName + '.tar.gz');
  var files = path.join(config.instances, instance, '**/*');
  yassert.file(path.join(config.instances, instance, 'app.json'));

  async.waterfall([
    function(cb) {
      del([tarballPath], cb);
    },
    function(err, cb) {
      gulp.src(files)
        .pipe(tar(tarballName + '.tar'))
        .pipe(gzip())
        .pipe(gulp.dest(config.temp))
        .pipe(gcallback(cb));
    }
  ], function(err, result) {
    if (err) return err;
    return done(err, tarballPath);
  });
}

下面是测试片段:

代码语言:javascript
复制
describe('gulp heroku:tarball', function() {
  after('something', function() {
    mock.restore();    
  });

  before('something', function() {
    mock({
      'instances/development': {
        'app.json': 'test content'
      }
    });
  });

  it('creates a tarball', function(done) {
    var options = {}

    heroku.herokuTarball(options, function(err, result) {
      expect(result).to.be.a('string');
      yassert.file(result);
      done();
    });
  });
});

注意,yassert (yeoman-assert)调用传递得很好--文件就在那里。如果我将带有gulp.src调用的函数从异步瀑布中取出,错误就会消失(当然,测试也会失败)。

问题发布在https://github.com/tschaub/mock-fs/issues/44

EN

回答 1

Stack Overflow用户

发布于 2015-10-07 23:50:21

你没有做错任何事,mock-fs README说:

Note mock-fs与-fs@3.x不兼容,但与graceful-fs@4.x兼容。

通过查看gulp的依赖关系,我们可以得到:

代码语言:javascript
复制
$ npm info gulp devDependencies.graceful-fs
^3.0.0

因此,gulp仍然依赖于graceful-fs@3.x,因此mock-fs将不起作用。

但是也许vinyl-fs-mock是另一种选择呢?

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

https://stackoverflow.com/questions/30602416

复制
相关文章

相似问题

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