В настоящее время я использую mock-fs для тестирования скрипта сборки, запущенного на файлах разметки моего проекта.
// readIndex.test.js
it('should reject if index.json doesn\'t returns an object', done => {
mock(_mocks['folder index exists'])
const promise = readIndex('test')
promise.should.be.rejectedWith('index not an object')
mock.restore()
done()
})
mock-fs позволяет мне на мгновение заменить текущую файловую иерархию на поддельную.
// _mocks/folderIndexExists/folderIndexExists.js
const mock = require('mock-fs')
module.exports = {
'test': {
'index.json': mock.file({
content: '{ "valid": "true" }'
})
}
}
В этом фрагменте кода вы видите дерево файлов, переданное в параметрах.
Но тут начинается моя проблема: При обнаружении файла index.json
в папке, функция fs.readFile
выдает ошибку.
fs.readFileSync
все еще достигает своей цели.
// readIndex.js
fs.readdir('test', (err, files) => console.log(files))
// ['index.json']
fs.readFile('test/index.json', (err, data) => console.log(data))
// { Error: EISDIR: illegal operation on a directory, fstat errno: -4068, code: 'EISDIR', syscall: 'fstat' }
const data = fs.readFileSync('test/index.json')
console.log(JSON.parse(buffer.toString()))
// { valid: 'true' }
Я подозреваю некоторую асинхронную концепцию, которую я бы не усвоил при тестировании.