Насколько я знаю mock-fs
издевается над файловой системой, а не утилитой узла. Конечно, в некоторых случаях вы можете использовать это для тестирования утилиты fs, но я думаю, что ваш вариант использования не входит в их число.
Вот пример с sinon.sandbox
Некоторые альтернативы:
Обратите внимание, что я немного запутался, откуда взялся ReadingFileError
, так что я думаю, вы пытаетесь реализовать пользовательскую ошибку. Если это так, возможно, это также будет полезно. В примере я заменил это на простой new Error('My !ENOENT error')
.
// readfile.js
'use strict'
const fs = require('fs')
function myReadUtil (filePath, done) {
fs.readFile(filePath, (err, data) => {
if (err) {
if (err.code !== 'ENOENT') {
return done(err, null)
}
return done(new Error('My ENOENT error'), null)
}
return done(null, data)
})
}
module.exports = myReadUtil
// test.js
'use strict'
const assert = require('assert')
const proxyquire = require('proxyquire')
const fsMock = {
readFile: function (path, cb) {
cb(new Error('My !ENOENT error'), null)
}
}
const myReadUtil = proxyquire('./readfile', { 'fs': fsMock })
myReadUtil('/file-throws', (err, file) => {
assert.equal(err.message, 'My !ENOENT error')
assert.equal(file, null)
})
Редактировать : Реорганизован пример использования обратного вызова в стиле узла вместо throw
и try/catch