我有一个函数,可以使用got下载文件,并使用fs.createWritableStream在磁盘上写入文件。代码运行顺利,但是单元测试很麻烦:
download(twilioPath, destFile) {
return new Promise(function(resolve, reject) {
const uri = `${TWILIO_BASE_URL}${twilioPath}`.replace('json', 'mp3')
let file = fs.createWriteStream(`/tmp/${destFile}`)
console.log(got)
let str = got.stream(uri)
console.log(uri)
str.on('error', function(err) {
console.log('Error dl', err)
reject(err)
})
str.pipe(file)
file.on('finish', function() {
console.log('banana')
let cb = function() {
console.log('Download completed')
resolve(file)
}
file.close(cb)
})
})
我的决心或拒绝没有得到回应,我也不知道该如何解决:
const Recording = require('./Recording')
const Readable = require('stream')
var mockedStream = new Readable();
var mockedWrite = new Readable.Writable()
jest.mock('fs', () => ({
createWriteStream: jest.fn((file_name) => {
return mockedWrite;
})
}));
jest.mock('got', () => {
return {
stream: () => {
return mockedStream
}
}
})
describe('Recording', () => {
test('should download a file from twilio', async () => {
...
mockedStream.emit('error')
mockedWrite.emit('finish')
console.log(result)
....
})
})
我试图强迫发射事件,但是没有幸运。
答案 0 :(得分:0)
偶然发现这个有点晚,但我已经找到了一些资源,以防其他人在这里登陆:
至于 OP,我认为一个问题可能是您可能需要从“流”(const { Readable, Writable } = require('stream')
)中解构 Readable 和 Writable