是否可以用"mock-fs"库模拟某种读取文件错误?特别是,我想测试这种情况(其中code !== 'ENOENT'
):
fs.readFile(filePath, (err, data) => {
if (err) {
if (err.code !== 'ENOENT') {
return done(new ReadingFileError(filePath));
}
}
// ...
});
关于在他们的文档中模拟阅读错误,我什么也找不到。也许还有其他一些库可以做到这一点。
答案 0 :(得分:1)
据我所知width
模拟文件系统而不是节点实用程序。当然,在某些情况下,您可以使用它来测试fs实用程序,但我认为您的用例不在其中。
一些替代方法是:
请注意,我有点困惑
height
的来源,所以我想您正在尝试实现自定义错误。如果是这种情况,那么this也可能会有所帮助。在示例中,我将其替换为简单的mock-fs
。
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)
})