我有一个File
类,基本上是fs.readFileSync
和fs.writeFile
的包装。我正在尝试模拟文件系统以进行单元测试,但是无法使其正常工作。非常感谢您的帮助。
我的File
班:
'use strict'
const fs = require('fs')
module.exports = class File {
constructor() {}
async savePicture(filename,imageData) {
if (filename === undefined || filename === '') throw new Error(`filename can't be empty`)
if (imageData === undefined || imageData === '') throw new Error(`imageData can't be empty`)
fs.writeFile(filename,imageData,'binary',(err) => {
if (err) throw new Error(err)
console.log('File saved.')
})
}
readPicture(filename) {
if (filename === undefined || filename === '') throw new Error(`filename can't be empty`)
try {
fs.readFileSync(filename,'binary')
} catch(err) {
throw new Error(`file doesn't exist`)
}
}
}
我的单元测试文件:
'use strict'
const mock = require('mock-fs')
const File = require('../modules/file')
const fs = require('fs')
beforeAll( async() => {
})
afterAll( async() => {
})
describe('savePicture()',() => {
beforeEach( async() => {
mock({
'test': {
'foo': 'bar'
}
});
})
afterEach( async() => {
afterEach(mock.restore);
})
test(`binary information has to be correctly saved`,async done => {
expect.assertions(1)
try {
const file = new File()
file.savePicture('test/foobar','raboof')
fs.readFile('test/foobar',(err,data) => {
if (err) throw new Error(err)
expect(data).toBe('raboof')
})
} catch(err) {
done.fail('test failed')
} finally {
done()
}
})
})
describe('readPicture()',() => {
beforeEach( async() => {
mock({
'/test': {
'foo': 'bar'
}
});
})
afterEach( async() => {
afterEach(mock.restore);
})
test(`binary information has to be correctly read`,async done => {
expect.assertions(1)
try {
const file = new File()
expect(file.readPicture('test/foo')).toBe('bar')
} catch(err) {
done.fail('test failed')
} finally {
done()
}
})
})