2015-06-02 81 views
1

我試圖使用mock-fs模擬文件系統內容以測試吞嚥任務。不幸的是,gulp.src似乎與mock-fs不配合。具體來說,我得到ENOENT錯誤:模擬文件系統內容與gulp.src不兼容

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文件就好了。

我在做什麼錯?我懷疑這個問題與飲料乙烯使用有關。

下面是測試中的功能:

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); 
    }); 
} 

這裏是測試片段:

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(自耕農斷言)調用傳遞罰款 - 該文件是存在的。如果我使用gulp.src調用異步瀑布函數的功能,錯誤消失(當然,測試失敗)。

問題張貼在https://github.com/tschaub/mock-fs/issues/44

回答