如何模拟' createReadStream '上的EventEmitter

How to mock an EventEmitter on `createReadStream`?

本文关键字:上的 EventEmitter createReadStream 何模拟 模拟      更新时间:2023-09-26

我试着写一个测试用例,当一个错误发出作为这段代码的结果:

s3.getObject({
    Bucket: mediaBucket,
    Key: mediaId,
  }).createReadStream()

我有一个虚拟S3对象的测试,我使用MemoryStream来覆盖调用成功的情况。我如何发出一个错误,以便我可以编写一个测试,允许我测试.on('error') function(error)..中的行为?

这是我尝试过的,但没有成功:

beforeEach(function () {
   var emitter = new EventEmitter;
   const s3 = {
     getObject: () => {
       return { createReadStream: () => emitter.emit('error', new Error('Random error!')) }
     },
};

就像处理其他事件一样发出它:

stream.emit('error', new Error('Random error!'));
所以,上面的代码应该看起来像:
const s3 = {
  getObject: () => {
    return { createReadStream: () => {
      process.nextTick(function() {
        emitter.emit('error', new Error('whoops!'));
      });
      return emitter;
    } }
  },
};