嘲笑流完成

时间:2018-11-16 12:13:28

标签: javascript mocking jestjs

我有一个函数,可以使用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)
    ....
  })
})

我试图强迫发射事件,但是没有幸运。

1 个答案:

答案 0 :(得分:0)

偶然发现这个有点晚,但我已经找到了一些资源,以防其他人在这里登陆:

至于 OP,我认为一个问题可能是您可能需要从“流”(const { Readable, Writable } = require('stream'))中解构 Readable 和 Writable