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