Ложный поток заканчивается на шутку - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть функция, которая загружает файл с использованием 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)
    ....
  })
})

Я пытался вызвать события, но не повезло.

...