mock-fs readFileSync работает, но readFile выбрасывает - PullRequest
0 голосов
/ 17 июня 2019

В настоящее время я использую 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' }

Я подозреваю некоторую асинхронную концепцию, которую я бы не усвоил при тестировании.

...